# jsconfig.json and tsconfig.json > jsconfig.json 和 tsconfig.json 都是用來定義專案中 JavaScript 和 TypeScript 編譯和編輯器行為的配置檔案。 ## 主要區別用途和作用的對象: * jsconfig.json: 主要用於 JavaScript 專案,配置編輯器(如 VS Code)對 JavaScript 專案的開發時的提示字樣。不涉及 TypeScript 編譯器的配置。 * tsconfig.json: 主要用於 TypeScript 專案,配置 TypeScript 編譯器的行為以及專案的結構和編譯過程。 ## 編譯器選項: * jsconfig.json: 包含的 compilerOptions 主要影響編輯器的功能,例如程式提示、跳轉等。雖然有些選項與 TypeScript 類似,`但它們不會影響實際的編譯過程`。 * tsconfig.json: 包含的 compilerOptions 用於配置 TypeScript 編譯器的具體行為,例如目標 ECMAScript 版本、模組解析策略、類型檢查嚴格性等,直接影響編譯結果。 ## 檔案範圍: * jsconfig.json: 主要用於定義編輯器應該關注的檔案範圍,幫助提升編輯器性能和準確性。 * tsconfig.json: 用於定義 TypeScript 編譯器應該編譯的檔案範圍。 ## Example * jsconfig.json ```javascript { "compilerOptions": { "target": "es6", "module": "commonjs", "checkJs": true, "allowSyntheticDefaultImports": true }, "include": ["src/**/*.js"], "exclude": ["node_modules"] } ``` * tsconfig.json ```javascript { "compilerOptions": { "target": "es6", "module": "commonjs", "strict": true, "jsx": "react", "baseUrl": "./", "paths": { "@components/*": ["src/components/*"] }, "outDir": "./dist", "rootDir": "./src", "esModuleInterop": true }, "include": ["src/**/*"], "exclude": ["node_modules"] } ``` ## 一同共用 **jsconfig.json** 和 **tsconfig.json** 通常不需要共用,因為它們針對不同的語言(JavaScript 和 TypeScript)和用途設計。然而,在某些情況下,可能需要兩者並存,但它們的作用範圍應該明確分開,以避免衝突。 > 什麼情況下需要兩者共存? #### 混合專案: * 如果一個專案中同時包含大量的 JavaScript 和 TypeScript 檔案,並且希望對兩者進行不同的配置,可以分別使用 jsconfig.json 和 tsconfig.json。 > #### 過渡專案: * 當一個 JavaScript 專案逐步遷移到 TypeScript 時,可以使用 jsconfig.json 來配置 JavaScript 部分,並使用 tsconfig.json 來配置 TypeScript 部分。 ## 混和時需注意的部分 ### 檔案範圍: * 確保 `include` 和 `exclude` 設置不重疊或衝突。例如,jsconfig.json 應該主要包含 JavaScript 檔案,而 tsconfig.json 應該主要包含 TypeScript 檔案。 ### 混合使用: * 如果 JavaScript 檔案和 TypeScript 檔案之間有相互依賴,確保 TypeScript 編譯器可以處理 JavaScript。在 tsconfig.json 中,可以設置 `allowJs: true`。 ## 結論 * 通常情況下,jsconfig.json 和 tsconfig.json 不需要同時使用,但在混合專案或過渡專案中可以共存。關鍵在於清晰分開它們的作用範圍,避免配置衝突。