TypeScript中的抽象构造函数类型

Joh*_*isz 26 constructor abstract-class typescript

TypeScript中非抽象类(非抽象构造函数)的类型签名如下:

declare type ConstructorFunction = new (...args: any[]) => any;
Run Code Online (Sandbox Code Playgroud)

这也称为类型.但是,我需要一个抽象类的类型签名(抽象构造函数).我的理解是可以被定义为具有类型Function,但就是这样过于宽泛.难道没有更精确的替代方案吗?


编辑:

为了澄清我的意思,下面的小片段演示了抽象构造函数和非抽象构造函数之间的区别:

declare type ConstructorFunction = new (...args: any[]) => any;

abstract class Utilities {
    ...
}

var UtilityClass: ConstructorFunction = Utilities; // Error.
Run Code Online (Sandbox Code Playgroud)

类型'typeof Utilities'不能分配给'new(... args:any [])=> any'.

无法将抽象构造函数类型分配给非抽象构造函数类型.

Mat*_*ens 36

从 TypeScript 4.2 开始,您可以使用抽象构造函数类型

abstract class Utilities {
    abstract doSomething(): void;
}

type ConstructorFunction = abstract new (...args: any[]) => any;
var UtilityClass: ConstructorFunction = Utilities; // ok!
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这是现在最好的答案。 (3认同)

小智 32

我自己只是在遇到类似的问题,这似乎对我有用:

type Constructor<T> = Function & { prototype: T }
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这确实是需要的.@cheez - 这描述了一个带有原型的函数 - 所以不要求类型定义构造函数,而是定义它定义原型.这是一个抽象类 - 没有构造函数,只有原型. (6认同)
  • @Knagis你们其中一个请详细说明这个答案.我真的希望能够使用它,但上面显示的方式并不是一个完整的答案让我理解. (4认同)
  • 您能否分享一个使用抽象构造函数构造类的示例。也许包括扩展课程? (2认同)