我需要有一个类数组,然后能够迭代该数组并访问这个类的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
我需要它是数组,因为所有这些类都是游戏实体组件的类,每个实体可能有不同的组件集,但每种类型只有一个组件。所以我创建了一个静态属性,以便能够检查这个组件是否已经添加到游戏对象中,而不创建该组件类的实例。
那我怎么能重写这段代码呢?
答案 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();
希望这有帮助。