最近在構建一個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不報錯;