JavaScript對象添加數據,因此,普通的JavaScript可以執行的代碼塊罰款:在打字稿
var myObj = {};
myObj['one'] = {};
console.log(myObj);
console.log(myObj.one);
但你在打字稿Property 'one' does not exist on type '{}'
得到這個錯誤,這只是設計? (例如,我希望把我自己的類此)
JavaScript對象添加數據,因此,普通的JavaScript可以執行的代碼塊罰款:在打字稿
var myObj = {};
myObj['one'] = {};
console.log(myObj);
console.log(myObj.one);
但你在打字稿Property 'one' does not exist on type '{}'
得到這個錯誤,這只是設計? (例如,我希望把我自己的類此)
damitij07's answer涵蓋了一堆的方法來解決這個問題,但我想指出我最喜歡的這種用例:interfaces。
interface myObj {
one:any;
}
現在您可以將變量標記爲界面,並且Typescript將檢查以確保對象符合要求。像任何其他類或類似的東西一樣傳遞它,它將在編譯時消失。沒有額外的工作js引擎,只需編譯時間檢查。
const myObjInstance:myObj = {one:0};
function foo(x:myObj):myObj { return x; }
如果你需要的領域是可選的,如果你不分配給字段
interface myObj {
one?:any;
}
現在打字稿不會抱怨。
最後要說明的是,這一切都假定您相信對象是您期望的。如果你從外部獲得了這個東西,即使你擁有它,你也應該在運行時檢查這個結構是否可以避免錯誤。
當你寫的代碼像這樣通過預測對象的類型,當你把它聲明打字稿介紹類型綁定錯誤。
var myObj = {};
myObj['one'] = {};
有很多建議解決或解決此模糊性,而編碼的方法:
創建一個類的對象,並創建一個實例。
export class myObj {
one:any;
}
let myObjInstance:myObj = new myObj();
myObjInstance.one = {};
//
console.log(myObj);
console.log(myObj.one);
另一種簡單的方法來解決可
//set type of myObj is any
let myObj:any = {};
myObj['one'] = {};
//no error
console.log(myObj);
console.log(myObj.one);
或可能,如果你想動態類型轉換
let myObj = {};
//cast while assigning
(<any>myObj)['one'] = {};
//no error
console.log(myObj);
console.log(myObj.one);
你的代碼與JSON沒有任何關係。 TypeScript執行靜態類型分析。所以是的,它給你的錯誤是設計的。 –
對不起,我不知道如何解釋它。這就是我從API響應中獲取的數據類型(res.json())。 –
很多人在說'JSON'時會引用普通的'JavaScript'對象。 'JSON'引用該JavaScript對象的實際可讀文本表示。 – Cristy