扩展抽象类的类是什么类型?

hf0*_*f02 7 typescript

我有一个抽象类,以及在数组中扩展它的类。我该输入什么数组?

abstract class AbstractClassToExtend {
    constructor() { console.log("hello") }
}

class One extends AbstractClassToExtend {}
class Two extends AbstractClassToExtend {}

const array = [One, Two] // what do i type this array?
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了const array: typeof AbstractClassToExtend[] = [One, Two],但是当创建数组中的类之一的实例时,

new array[0]()
Run Code Online (Sandbox Code Playgroud)

它给出了一个错误:

error TS2511: Cannot create an instance of an abstract class.
Run Code Online (Sandbox Code Playgroud)

我正在使用 Typescript 4.3.2。

Fra*_*ica 3

您特别想要实例化数组中的类型,因此我不确定您是否可以将数组键入为具有抽象类。

也许这并不像您希望的那么优雅,但是您可以拥有一个具体的基本实现,其他实现可以从中继承:

abstract class AbstractClassToExtend { }

class BaseImplementation extends AbstractClassToExtend { }

class One extends BaseImplementation { }
class Two extends BaseImplementation { }

const array: (typeof BaseImplementation)[] = [One, Two]

const a: BaseImplementation = new array[0]();
const b: BaseImplementation = new array[1]();
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用一个返回抽象类型实例的函数数组:

const functions: Array<() => AbstractClassToExtend> = [() => new One(), () => new Two()];

const c: AbstractClassToExtend = functions[0]();
const d: AbstractClassToExtend = functions[1]();
Run Code Online (Sandbox Code Playgroud)