繁体   English   中英

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

[英]How to type constructor functions that are properties of an object in TypeScript?

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

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

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

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

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

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

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

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

请参见下面的示例:

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

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

接下来是MyObj的界面

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

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

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 });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM