最近在構建一個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.json
和tsconfig.json
,一個個屬性過去后,發現是tsconfig.json
配置項"noImplicitAny": true,
導致的.
解釋: noImplicitAny:true/false;為 false 時,如果編譯器無法根據變量的使用來判斷類型時,將用 any 類型代替。為 true 時,進行強類型檢查,會報錯,很顯然,我報的這個錯就是這個,將 noImplicitAny:false即可。
方法三
在tsconfig.json
里noImplicitAny:true
的同時增加"suppressImplicitAnyIndexErrors":true,
也可讓vscode不報錯;