---
# System prepended metadata

title: jsconfig.json and tsconfig.json
tags: [config, 配置, 筆記]

---

# 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 不需要同時使用，但在混合專案或過渡專案中可以共存。關鍵在於清晰分開它們的作用範圍，避免配置衝突。