修改 tsconfig.json
{ "compilerOptions": { "target": "esnext", "module": "esnext", "strict": true, "jsx": "preserve", "importHelpers": true, "moduleResolution": "node", "experimentalDecorators": true, "skipLibCheck": true, "esModuleInterop": true, "allowJs": true, // 允許js "allowSyntheticDefaultImports": true, "noImplicitAny": false, // 不進行any語法檢查 "sourceMap": true, "baseUrl": ".", "types": [ "webpack-env" ], "paths": { "@/*": [ "src/*" ] }, "lib": [ "esnext", "dom", "dom.iterable", "scripthost" ] }, "include": [ "src/**/*.js", // 導入js "src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "tests/**/*.ts", "tests/**/*.tsx", "public/config.js" // 導入js ], "exclude": [ "node_modules" ] }
oImplicitAny編譯器選項所做的,基本上是將TypeScript從可選類型語言轉換為強制類型檢驗語言。
簡單的:
function logMe(x) { console.log(x); } // error TS7006: Parameter 'x' implicitly has an 'any' type.
也將報錯——你必須明確聲明x
的類型為any
:
function logMe(x: any) { console.log(x); } // OK
這意味着,如果你要把現有的JS代碼庫遷移到TS,那除了更改文件擴展名,你還得做一些較復雜的東西。這還意味着,在編寫代碼時,您需要更多地關注類型,如果不指定類型,編譯器就總是會「抱怨」。