我想在TypeScript中创建一个类数组。这在香草JavaScript中是可能的:
class A {
constructor() {console.log('constructor');}
a() {}
}
const array = [A];
new (array[0])(); // Prints 'constructor'
我想使用接口使数组类型安全。这是我在TypeScript中实现的尝试:
interface I {
a();
}
class A implements I {
constructor() {console.log('constructor')}
a() {}
}
const array: I[] = [A];
new (array[0])();
编译时,出现此错误:
Error:(16, 21) TS2322: Type 'typeof A' is not assignable to type 'I'.
Property 'a' is missing in type 'typeof A'.
由于此错误消息提到typeof A is not assignable to type 'I'
,似乎数组不能包含类,因为typeof
用于实例化对象。
我需要的是一种将所有类分组为一个变量而无需实例化它们的方法,并且能够通过索引访问该类。如何在TypeScript中实现这一目标?
答案 0 :(得分:3)
接口定义了实例上可用的属性和方法,因此可以正常工作:
const array: I[] = [new A()];
这不是您想要的,但它应该证明它不起作用的原因:类和实例是两个不同的东西。
您想说的是“这是一个类型数组,new()将返回I的实例”。
我认为它应该像这样:
class Test implements I {
a() {}
}
interface I {
a();
}
interface TI {
new (): I;
}
const arr: TI[] = [Test];
const inst = new arr[0]();