2016-02-29 8 views
8

In Javascript, wenn ich will ein Wörterbuch Schleife durch und legen Sie die Eigenschaften eines anderen Wörterbuch, würde ich so etwas wie folgt verwenden:Typoskript hasOwnProperty Äquivalent

for (let key in dict) { 
    if (obj.hasOwnProperty(key)) { 
    obj[key] = dict[key]; 
    } 
} 

Wenn obj ist ein Typoskript Objekt (Instanz einer Klasse) Gibt es eine Möglichkeit, dieselbe Operation durchzuführen?

Antwort

15

Wenn Obj ein Typescript-Objekt (Instanz einer Klasse) ist, gibt es eine Möglichkeit, dieselbe Operation auszuführen?

Ihr JavaScript ist gültig TypeScript (more). Sie können also denselben Code verwenden wie er ist. Hier

ein Beispiel:

class Foo{ 
    foo = 123 
} 

const dict = new Foo(); 
const obj = {} as Foo; 

for (let key in dict) { 
    if (obj.hasOwnProperty(key)) { 
    obj[key] = dict[key]; 
    } 
} 

Hinweis: Ich würde Object.keys(obj).forEach(k=> auch für JavaScript empfehlen, aber das ist nicht die Frage, die Sie hier fragen.

+3

Ich habe eine Nebenfrage dazu; In Ihrem Fall initialisieren Sie die foo-Eigenschaft, die sicherstellt, dass sie im generierten js-Code vorhanden ist. Wenn die Eigenschaft jedoch nicht definiert ist, ist sie überhaupt nicht Teil des generierten Codes. Weißt du warum das so ist? Das hat mich ein wenig überrascht, als ich hasOwnProperty für eine Instanz benutzte und falsch zurückkam, obwohl ich erwartet hatte, dass sie vorhanden, aber nicht definiert war. – dSebastien

+2

Nehmen wir an, dass undefinierte Eigenschaften, dh alle Eigenschaften, die im Typoskript 'Klasse A {prop1: string, prop2: number}} definiert sind, nicht von' Object.keys' oder 'this.hasOwnProperty (k)' seither aufgelistet werden Das Autogen-JavaScript kennt diese Eigenschaften nicht. – loretoparisi

+2

Warum würden Sie 'Object.keys (obj) .forEach 'empfehlen (k =>' over 'for()'? – Coo