2016-03-04 123 views
0

我需要的类数组,然后可以遍历数组和访问此班stratic属性:访问静态属性PARAMS

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

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

这个例子会导致错误:

Property 'type' does not exist on type new()=>Blah

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

那么我该如何重写这段代码呢?

回答

0

那么你可以这样说:

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

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

但是,这是没有意义的我,因为静态属性“型”的价值将在类的所有实例之间共享。所以你的console.log会为每个对象写入相同的值。

所以要么考虑让'type'非静态或考虑重构你的类结构。

[编辑]

如果你有需要遍历不同类别的设定和打印出自己的“型”的静态属性(考虑到所有的人都有一个),那么就可以做到这样。

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

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(); 

希望这有助于。

+0

thanx为你响应。我将有一大堆从Blah继承而来的具有不同'type'值的类,并且在任何时候我都不会了解'blahs'数组中的类是什么,所以我不能使用任何变体。 – SET

+0

'Blahs'不是一个数组。我们可以用它定义的类来说它的模块。如果你可以参考它 - 你不需要知道它的内容和代码将工作。 – Amid

+0

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

相关问题