"元素隱式具有 “any” 類型,因爲類型“Shared”沒有索引簽名"問題解決思路

 

最近在構建一個typescript項目時如下代碼在項目框架裏vscode報錯元素隱式具有 "any" 類型,因爲類型“Shared”沒有索引簽名;很有意思的是當我們單獨的把這段代碼裏單獨寫一個a.ts,則vscode不會報錯; 在搜索網上資料及自己嘗試後,找到了幾個有意思的解決方法。

 

class Shared {
get( key: string ) {
return this[key];
}
set( key: string, value: any) {
this[key] = value;
}
private root = __dirname;
}
export default new Shared();

方法一

定義一個變量,其類型顯性爲any,可以讓vscode不報錯,代碼如下;

class Shared {
map: any;
get( key: string ) {
return this['map'][key];
}
set( key: string, value: any) {
this['map'][key] = value;
}
private root = __dirname;
}

方法二

思考單獨的.ts和typescript框架在vscode層的差異,想想只有launch.jsontsconfig.json,一個個屬性過去後,發現是tsconfig.json配置項"noImplicitAny": true, 導致的.

解釋: noImplicitAny:true/false;爲 false 時,如果編譯器無法根據變量的使用來判斷類型時,將用 any 類型代替。爲 true 時,進行強類型檢查,會報錯,很顯然,我報的這個錯就是這個,將 noImplicitAny:false即可。

方法三

tsconfig.jsonnoImplicitAny:true的同時增加"suppressImplicitAnyIndexErrors":true,也可讓vscode不報錯;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章