2017-09-06 4 views
1

Ich bin Schleifen Daten in einem Array und möchte meine geloopte Element auf eine erweiterte Schnittstelle (es hat eine zusätzliche Label-Feld). Was kann ich neu gestalten? zu einer "PersonLabel"?typescript Casting/Assertion mit einer for-Schleife

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

Ich habe versucht, Ansätze wie diese (nicht kompilieren):

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

und diese (nicht kompiliert)

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

Antwort

0

Sie könnten versuchen:

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

Sie können <Type> oder 0 verwenden.

In Ihrem Fall bedeutet dies:

person = <PersonLabel> person; 

oder die bevorzugte Art und Weise mit as:

person = person as PersonLabel; 

Denken Sie daran, const person zu let person ändern, da Sie kein const zuweisen können.

Oder man kann es bereits in der for-Schleife wie diese Stimmen:

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

Dies setzt voraus, PersonLabel aus der Klasse leitet Person. Andernfalls können Sie die Typen nicht umwandeln (Sie können z. B. number nicht in string umwandeln).

Verwandte Themen