我有一个抽象类,以及在数组中扩展它的类。我该输入什么数组?
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。
您特别想要实例化数组中的类型,因此我不确定您是否可以将数组键入为具有抽象类。
也许这并不像您希望的那么优雅,但是您可以拥有一个具体的基本实现,其他实现可以从中继承:
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)
归档时间: |
|
查看次数: |
1867 次 |
最近记录: |