从数组参数

时间:2016-03-04 10:31:03

标签: typescript

我需要有一个类数组,然后能够迭代该数组并访问这个类的stratic属性:

class Blah{
    static type: string = "blah";
}

class Foo{
    blahs: Array<{new(): Blah}>
    go(){
        this.blahs.map(function(blah){
            console.log(blah.type);
        })
    }
}

此示例将导致错误:

  

属性&#39;类型&#39;类型new()=>Blah

上不存在

我需要它是数组,因为所有这些类都是游戏实体组​​件的类,每个实体可能有不同的组件集,但每种类型只有一个组件。所以我创建了一个静态属性,以便能够检查这个组件是否已经添加到游戏对象中,而不创建该组件类的实例。

那我怎么能重写这段代码呢?

1 个答案:

答案 0 :(得分:0)

嗯,你可以这样:

class Blah
{
    static type: string = "blah";
}

class Foo
{
    blahs: Array<Blah>
    go()
    {
        this.blahs.map(function(blah)
        {
            console.log(Blah.type);
        })
    }
}

但这对我来说没有意义,因为静态属性的类型&#39;类型&#39;将在班级的所有实例之间共享。因此,您的console.log将为每个对象写入相同的值。

所以要么考虑制作&#39;键入&#39;非静态或考虑重新修改类结构。

[编辑]

如果您需要迭代一组不同的类并打印出他们的&#39;类型&#39;静态属性(考虑到它们都有一个),那么就可以这样做。

使用所有这些类声明单独的模块文件:

Blahs.ts:

export class Blah0
{
    static type: string = "blah";
}

export class Blah1
{
    static type: string = "blah";
}

export class Blah2
{
    static type: string = "blah";
}

然后在你的app.ts:

import * as Blahs from 'Blahs';

class Foo
{
    go()
    {
        Object.keys(Blahs).forEach(className => 
        {
            console.log(Blahs[className].type);
        });
    }
}

let f = new Foo();
f.go();

希望这有帮助。