TypeScript:有没有办法使用typeof运算符获得类型数组?

时间:2013-08-10 14:51:44

标签: arrays typescript typeof

给出以下代码:

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

然而,似乎没有用于在数组中存储多种类型的语法。

这是对的吗?

3 个答案:

答案 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

See it on the playground