typescript - 如何在 TypeScript 中键入作为对象属性的构造函数?
问题描述
我有一个对象,其属性是构造函数。如何正确输入:
interface MyObj {
constructor: () => ({ init: () => void })
}
const myObj = {
constructor: function(this: any) {
this.init = function() {
this.var = 5;
}
}
}
这可以正常工作,但那是因为我this: any
在构造函数中有。如果我删除我有错误
类型 '{ 构造函数:() => void; 上不存在属性 'init' }'
类型 '{ 构造函数:() => void; 上不存在属性 'var' }'
像这样键入构造函数的正确方法是什么?
解决方案
您应该使用关键字“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 });
推荐阅读
- python - 绘制日期时间索引
- python - Python,如何将不同的excel工作簿作为工作表组合成一个excel工作簿
- javascript - 单选按钮绑定在 VueJS 中不起作用
- java - 接收比预期更多的数据
- wordpress - 如何从 functions.php 的 pre_get_posts 中访问类别上的 ACF 字段以修改存档查询
- java - 在 Java 中将拆分器转换为列表的最佳习语是什么?
- python - PyQuery 和 PDFQuery 从 XML 或 PDF 中的下一个兄弟中提取文本
- sharepoint - 远程服务器在 SSIS 工具上返回错误 404 共享点连接管理器
- java - 如何在 Android 10 上将文件保存到内部存储
- assembly - AVR 汇编为什么 LDI 指令只能使用 R16 - R31 寄存器