如何在TypeScript中键入作为对象属性的构造函数?

时间:2019-09-24 10:30:51

标签: typescript

我有一个对象,该对象的属性是构造函数。我该如何正确输入:

interface MyObj {
    constructor: () => ({ init: () => void })
}

const myObj = {
    constructor: function(this: any) {
        this.init = function() {
            this.var = 5;
        }
    }
}

这可以正常工作,但是那是因为我在构造函数中有this: any。如果我删除了我的错误信息

  

类型'{不存在属性'init'构造函数:()=> void; }'

     

类型'{上不存在属性'var':()=> void; }'

这样键入构造函数的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您应该使用关键字“ new”来描述构造函数的类型

请参见以下示例:

首先,我们定义构造函数选项接口

interface MyObjConfig<T> {
    init: (instance: T) => void;
}

接下来是MyObj的界面

interface MyObj<T> {
    constructor: new (config: MyObjConfig<T>) => T;
}

现在,我们创建MyObj和一些测试类的具体实现

class MyObjItem {
    public var: number;
}

const myObj: MyObj<MyObjItem> = {
    constructor: MyObjItem
};

现在我们可以使用myObj构造新实例

const initiator = (instance: MyObjItem) => {
    instance.var = 5;
};


const concreteInstance = new myObj.constructor({ init: initiator });