2016-02-29 17 views
8

in JavaScript Se voglio collegare attraverso un dizionario e impostare le proprietà di un altro dizionario, mi piacerebbe usare qualcosa di simile:tipografico hasOwnProperty equivalente

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

Se obj è un oggetto tipografico (istanza di una classe) , c'è un modo per eseguire la stessa operazione?

risposta

15

Se obj è un oggetto Typescript (istanza di una classe), esiste un modo per eseguire la stessa operazione?

Il codice JavaScript è valido TypeScript (more). Quindi puoi usare lo stesso codice che è.

Ecco un esempio:

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]; 
    } 
} 

Nota: mi sento di raccomandare Object.keys(obj).forEach(k=> anche per JavaScript, ma che non è la questione si sta chiedendo qui.

+3

Ho una domanda a parte su questo; nel tuo caso si inizializza la proprietà foo, che assicura che sia presente nel codice js generato; anche se la proprietà non è definita, allora non fa parte del codice generato. Sai perché? Questo mi ha sorpreso un po 'quando ho provato ad usare hasOwnProperty su qualche istanza e ho ottenuto il false back anche se mi aspettavo che fosse presente ma indefinito. – dSebastien

+2

Consideriamo che le proprietà non definite vale a dire tutte le proprietà che sono definite nella 'classe A typescript {prop1: string, prop2: numero}' non saranno enumerate da nessuno dei 'Object.keys' o' this.hasOwnProperty (k) 'dal l'autogen javascript non ha alcuna conoscenza di queste proprietà. – loretoparisi

+2

Perché dovresti raccomandare 'Object.keys (obj) .for Any (k =>' per '()'? – Coo

Problemi correlati