2016-02-29 68 views
8

在javascript中,如果我想通過詞典環和另一個字典的設置屬性,我會使用這樣的:打字稿hasOwnProperty相當於

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

如果obj是打字稿對象(類的實例) ,有沒有辦法執行相同的操作?

回答

15

如果obj是Typescript對象(類的實例),有沒有辦法執行相同的操作?

JavaScript是有效的打字稿(more)。所以你可以使用相同的代碼。

下面是一個例子:

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

注:我建議,甚至爲JavaScript Object.keys(obj).forEach(k=>但不是你問這裏的問題。

+3

我對此有個疑問,在你的情況下,你初始化foo屬性,它確保它存在於生成的js代碼中;雖然如果該屬性沒有定義,那麼它根本不是生成的代碼的一部分。你知道這是爲什麼嗎?當我嘗試在某個實例上使用hasOwnProperty時,這讓我感到很驚訝,並且得到了錯誤的迴應,儘管我期望它存在但未定義。 – dSebastien

+2

讓我們考慮未定義的屬性,即在typecript {class A {prop1:string,prop2:number}}中定義的所有屬性不會被Object.keys或this.hasOwnProperty(k)中的任何一個枚舉自動化JavaScript沒有這些屬性的知識。 – loretoparisi

+2

爲什麼你會推薦'Object.keys(obj).forEach(k =>'over'for()'? – Coo