2016-02-29 12 views
8

w javascript, jeśli chcę pętli słownika i ustawianie właściwości innego słownika, będę używać coś takiego:Typescript hasOwnProperty równoważne

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

Jeśli obj jest obiektem Maszynopis (instancja klasy) , czy jest sposób na wykonanie tej samej operacji?

Odpowiedz

15

Jeśli obiekt jest obiektem typu maszynopis (instancją klasy), czy istnieje sposób wykonania tej samej operacji?

Własny JavaScript jest ważny TypeScript (more). Więc możesz użyć tego samego kodu, jaki jest.

Oto przykład:

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

Uwaga: Polecam Object.keys(obj).forEach(k=> nawet dla JavaScriptu, ale to nie jest pytanie prosicie tutaj.

+3

Mam boczne pytanie na ten temat; w twoim przypadku zainicjujesz właściwość foo, która zapewni, że jest obecna w wygenerowanym kodzie js; chociaż jeśli właściwość nie jest zdefiniowana, to w ogóle nie jest częścią generowanego kodu. Czy wiesz, dlaczego tak jest? To mnie trochę zaskoczyło, gdy próbowałem używać hasOwnProperty na niektórych instancjach i otrzymałem fałszywy zwrot, chociaż spodziewałem się, że będzie obecny, ale nieokreślony. – dSebastien

+2

Rozważmy, że niezdefiniowane właściwości, tj. Wszystkie właściwości zdefiniowane w maszynopisie "klasa A {prop1: ciąg, prop2: liczba}" nie będą wyliczane przez żaden z 'Object.keys' lub' this.hasOwnProperty (k) ', ponieważ autogen javascript nie ma wiedzy o tych właściwościach. – loretoparisi

+2

Dlaczego polecasz 'Object.keys (obj) .forEach (k =>' over 'for()'? – Coo