给出以下代码:
class Type
{
static Property = 10;
}
class Type1 extends Type
{
static Property = 20;
}
class Type2 extends Type
{
static Property = 30;
}
我想创建一个函数,它可以返回一个类型数组,这些类型都继承自同一个基类,允许访问"静态方面"班上的。例如:
function GetTypes(): typeof Type[]
{
return [Type1, Type2];
}
所以现在理想情况下我可以去:
GetTypes(0).Property; // Equal to 20
然而,似乎没有用于在数组中存储多种类型的语法。
这是对的吗?
答案 0 :(得分:5)
当然有。您的代码正确减去GetTypes
函数的返回类型。 (要明确史蒂夫的答案也会解决你的问题,这只是另一种不使用接口的方法)。
将GetTypes
功能的返回类型更改为:
function GetTypes(): Array<typeof Type>
{
return [Type1, Type2];
}
这应该是诀窍。
答案 1 :(得分:1)
执行此操作的正确方法是创建一个接口,该接口描述该类型支持的属性(或操作)(不属于该类型的实例):
interface Test {
x: number;
}
class MyType {
static x = 10;
}
class MyOtherType {
static x = 20;
}
var arr: Test[] = [MyType, MyOtherType];
alert(arr[0].x.toString());
alert(arr[1].x.toString());
答案 2 :(得分:-1)
没有。目前仅支持单个标识符。我在此处发出了一项功能请求:https://typescript.codeplex.com/workitem/1481
尽管如此,您只需创建一个虚拟接口来捕获typeof Type
,然后在数组中使用它,即:
class Type
{
static Property = 10;
}
class Type1 extends Type
{
static Property = 20;
}
class Type2 extends Type
{
static Property = 30;
}
// Create a dummy interface to capture type
interface IType extends Type{}
// Use the dummy interface
function GetTypes(): IType[]
{
return [Type1, Type2];
}
GetTypes[0].Property; // Equal to 20