typescript - 类作为实例与类定义 | 打字稿
问题描述
默认情况下,打字稿正确地将类类型推断为所述类的实例,而不是类定义本身。我最近在重构类工厂方法时遇到了这种区别。
我的问题是表明参数或类型是类的实例或类的可调用定义的最佳方式是什么?
以这个类为例
class MyClass implements IMyClass {
foo = 'foo';
bar() {
return 'bar';
}
}
现在我有两个函数,第一个callBar
是期望类的实例
function callBar(instance: MyClass) {
return instance.bar();
}
第二个classFactory
是期待类定义。
function classFactory(MyClassDefinition: MyClass) {
return new MyClassDefinition();
}
问题是第二个函数抛出类型错误
(parameter) MyClassDefinition: MyClass
This expression is not constructable.
Type 'MyClass' has no construct signatures.(2351)
我采用的解决方案是使用npm 包中的Class
类型。utility-types
这被定义为...
type Class<T> = new (...args: any[]) => T;
function classFactory(MyClassDefinition: Class<MyClass>) {
return new MyClassDefinition();
}
有没有更清晰、更好或更简单的方法来区分?
谢谢!
解决方案
您需要将其指示为构造函数类型:
function classFactory(MyClassDefinition: new () => MyClass) {
return new MyClassDefinition();
}
推荐阅读
- java - 使用函数将元素添加到类数组。处理 3 中的“绘画”
- r - 使用循环函数在基础 R 中生成多个图,然后通过匹配组变量连接
- google-cloud-platform - 我无法以 root 身份连接 GCP 上的虚拟机
- node.js - npm 错误 npm 错误!JSON.parse 在'...ejs":"2.6.1" 附近解析时 JSON 输入意外结束
- javascript - React app - 在 Material UI Table 中加载选定的数组而不是渲染检查
- ruby-on-rails - ruby on rails 4 activerecord - 组合和唯一连接查询优化
- uitableview - 设置 UITableView Cell 高度(包含动态 UICollectionView)
- c++ - fwrite 在数据写入磁盘之前会阻塞吗?
- haskell - 函数式编程中安全、纯粹和引用透明度之间的关系是什么?
- typescript - 从 VSCode 运行单个 mocha 测试