Typescript-特定父级的扩展类数组

Eli*_*hen 1 types typescript

我有一个抽象类,称为Action

abstract class Action { ... }
Run Code Online (Sandbox Code Playgroud)

我有几个扩展的类Action

class Vote extends Action { ... }
class Upload extends Action { ... }
...
Run Code Online (Sandbox Code Playgroud)

我如何声明一个扩展的类数组Action(但不应该接受Action自己?

const actions: (typeof Action)[] = [
  Vote,    // OK (passes)
  Upload,  // OK (passes)
  File,    // OK (fails)
  Action   // BAD (passes)
]
Run Code Online (Sandbox Code Playgroud)

Tit*_*mir 5

使用返回抽象类而不是抽象类的构造函数签名。抽象类在类型系统中没有构造函数,因此它将是无效的,但是任何继承该抽象类的派生类将是有效的。

abstract class Action { ... }

class Vote extends Action { ... }
class Upload extends Action { ... }

const actions: (new () => Action)[] = [
  Vote,    // OK (passes)
  Upload,  // OK (passes)
  File,    // OK (fails)
  Action   // Ok now (fails)
]
Run Code Online (Sandbox Code Playgroud)