2

给定以下代码:

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

但是,似乎没有在数组中存储多种 typeof 类型的语法。

这个对吗?

4

3 回答 3

5

当然有。您的代码是正确的减去GetTypes函数的返回类型。(要明确史蒂夫的回答也可以解决您的问题,这只是另一种不使用接口的方法)。

将函数的返回类型更改GetTypes为:

function GetTypes(): Array<typeof Type>
{
    return [Type1, Type2];
}

这应该是诀窍。

于 2013-08-13T12:42:54.957 回答
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());
于 2013-08-10T16:59:26.473 回答
-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

在操场上看

于 2013-08-10T22:18:21.900 回答