的情況並不少見有一個接口(例如,通過庫定義),可以包含任意數據,這樣的:屬性訪問器maplike對象
interface Something {
name: string;
data: { [key: string]: any };
}
我的問題是打字稿錯誤,當我嘗試訪問或者在具有任意值的對象上設置值。
let a: Something = {
name: 'foo',
data: { bar: 123 }
};
// Below errors with: 'Property "bar" does not exist on type {[key:string]: any}'
console.log(a.data.bar);
a.data.bar = 234;
這是一個在Typescript中的錯誤還是有一種簡單的方法來避免這樣的錯誤?
This Typescript playground清楚地說明了這個問題。
編輯
我正在尋找一個選項,希望不會讓我有整個代碼庫重寫從a.data.bar
到a.data['bar']
。
感謝您的回覆,我以前見過這種方法,但對我來說似乎有缺陷。我正在嘗試將一個小型項目轉換爲Typescript,並且一個庫有一個類似於我的問題的界面。所以我需要去遍歷所有文件,並從首選的'obj.prop'轉換爲'obj ['prop']'? 此外,這個選項也讓我沒有代碼完成。這現在不是非常重要,但我覺得像這樣重寫我的代碼嚴重得多。 – Csvn
@Csvn有沒有簡單的解決方案,但我編輯了我的答案,你有幾個選項。 –
好吧,我似乎無法找到您提供的解決方案之外的解決方案。唯一的其他選擇似乎是將'{[key:string]:any}'改變/覆蓋到'any',這不太清楚。 – Csvn