2017-09-06 14 views
1

私は配列内のデータをループして、ループしたアイテムを拡張インターフェースにキャストしたい(余分なラベルフィールドを持っている)。何を書き直すことができますか? 「PersonLabel」にforcriptを使ったtypescriptキャスト/アサーション

for (const person:PersonLabel of people) { 
    person.label = `${person.namespace}:${person.name}`; 
    this.peopleList.push(person); 
} 

と、これは(コンパイルされません)あなたが試みることができる

for (const person of people) { 
    person = typeof PersonLabel; 
    person.label = `${person.namespace}:${person.name}`; 
    this.peopleList.push(person); 
} 

答えて

0

for (const person of people as PersonLabel[]) { 
    person.label = `${person.namespace}:${person.name}`; 
    this.peopleList.push(person); 
} 
0

for (const person of people) { 
    person.label = `${person.namespace}:${person.name}`; 
    this.peopleList.push(person); 
} 

は、私がこのようなアプローチを(コンパイルされません)試してみました

<Type>または0を使用できます。。

person = <PersonLabel> person; 

をかasとれる好ましい方法は::

は、あなたのケースでは、これは意味

person = person as PersonLabel; 

あなたがconstを再割り当てすることはできませんようlet personconst personを変更することを忘れないでください。

それとも、このようなためのループですでにそれをキャストすることができます

for (const person of people as PersonLabel[]) { //<PersonLabel[] people should work as well... 
    person.label = `${person.namespace}:${person.name}`; 
    this.peopleList.push(person); 
} 

これはクラスPersonからPersonLabel派生を前提としています。それ以外の場合は、タイプをキャストできません(numberstringにキャストできないなど)。

関連する問題