1

基本上我正在尝试创建一个动态定义类的函数,该类从传递的对象扩展另一个类。像这样的东西:

const ObjectMixin = function<T>(obj: T): new () => T {
    return class extends BaseClass {
        ...obj // pseudo code to convey the idea 
    }
}

这样做的目标是能够编写混入映射状态的 Vue 类组件。像这样:

class MyComponent extends ObjectMixin(smartModule.mapState(['someState'])) {
    created() {
        this.someState // should not give any errors
    }
}

我几乎让它与黑客一起工作

interface ObjMixinI {
    <T>(obj: T): new () => T
}

const ObjectMixin: ObjMixinI = obj =>
//@ts-ignore
    function() {
        //@ts-ignore
        Object.assign(this, obj)
    }

但我不能让它扩展 Vue 加上它显然是一个可怕的解决方案。

4

1 回答 1

0

您可能可以使用constructor这样的:

const ObjectMixin = function<T>(obj: T) {
    return class extends BaseClass {
        constructor() {
            super();

            Object.assign(this, obj);
        }
    } as { new (): BaseClass & T }
}

class X extends ObjectMixin({ test: 42 }) { }
const x = new X();
console.log(x.test);
于 2021-10-07T13:32:38.937 回答