Class 作为实例 vs Class 定义 |打字稿
Class as instance vs Class definition | Typescript
默认情况下,typescript 正确地将 class 类型推断为上述 class 的 实例 而不是 class 定义本身。我最近在重构 class 工厂方法时遇到了这种区别。
我的问题是什么是指示参数或类型是 class 的实例或 [=46= 的 callable 定义的最佳方式]?
以这个为例class
class MyClass implements IMyClass {
foo = 'foo';
bar() {
return 'bar';
}
}
现在我有两个函数,第一个 callBar
需要一个 class
的实例
function callBar(instance: MyClass) {
return instance.bar();
}
第二个 classFactory
需要 class 定义。
function classFactory(MyClassDefinition: MyClass) {
return new MyClassDefinition();
}
问题是第二个函数抛出类型错误
(parameter) MyClassDefinition: MyClass
This expression is not constructable.
Type 'MyClass' has no construct signatures.(2351)
我采用的解决方案是使用 utility-types
npm 包中的 Class
类型。定义为...
type Class<T> = new (...args: any[]) => T;
function classFactory(MyClassDefinition: Class<MyClass>) {
return new MyClassDefinition();
}
是否有更清晰、更好或更简单的方法来进行这种区分?
谢谢!
您需要将其指定为构造函数类型:
function classFactory(MyClassDefinition: new () => MyClass) {
return new MyClassDefinition();
}
默认情况下,typescript 正确地将 class 类型推断为上述 class 的 实例 而不是 class 定义本身。我最近在重构 class 工厂方法时遇到了这种区别。
我的问题是什么是指示参数或类型是 class 的实例或 [=46= 的 callable 定义的最佳方式]?
以这个为例class
class MyClass implements IMyClass {
foo = 'foo';
bar() {
return 'bar';
}
}
现在我有两个函数,第一个 callBar
需要一个 class
function callBar(instance: MyClass) {
return instance.bar();
}
第二个 classFactory
需要 class 定义。
function classFactory(MyClassDefinition: MyClass) {
return new MyClassDefinition();
}
问题是第二个函数抛出类型错误
(parameter) MyClassDefinition: MyClass
This expression is not constructable.
Type 'MyClass' has no construct signatures.(2351)
我采用的解决方案是使用 utility-types
npm 包中的 Class
类型。定义为...
type Class<T> = new (...args: any[]) => T;
function classFactory(MyClassDefinition: Class<MyClass>) {
return new MyClassDefinition();
}
是否有更清晰、更好或更简单的方法来进行这种区分?
谢谢!
您需要将其指定为构造函数类型:
function classFactory(MyClassDefinition: new () => MyClass) {
return new MyClassDefinition();
}