首页 > 解决方案 > 如何在 TypeScript 中键入作为对象属性的构造函数?

问题描述

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

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

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

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

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

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

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

标签: typescript

解决方案


您应该使用关键字“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 });

推荐阅读