本章節提供 TypeScript 運作方式的鳥瞰圖:一般 TypeScript 專案的結構為何?如何編譯以及如何編譯?我們如何使用 IDE 編寫 TypeScript?
這是 TypeScript 專案可能有的檔案結構
typescript-project/
dist/
ts/
src/
main.ts
util.ts
test/
util_test.ts
tsconfig.json
說明
ts/
包含 TypeScript 檔案
ts/src/
包含實際程式碼。ts/test/
包含程式碼的測試。dist/
是編譯器輸出結果的儲存位置。ts/
中的 TypeScript 檔案編譯成 dist/
中的 JavaScript 檔案。例如
ts/src/main.ts
編譯成 dist/src/main.js
(以及其他可能的檔案)tsconfig.json
用於設定 TypeScript 編譯器。tsconfig.json
tsconfig.json
的內容如下
{
"compilerOptions": {
"rootDir": "ts",
"outDir": "dist",
"module": "commonjs",
···
}
}
我們已指定
ts/
。dist/
。兩個流行的 JavaScript IDE 是
本節的觀察結果是關於 Visual Studio Code,但也可能適用於其他 IDE。
要了解的一個重要事實是,Visual Studio Code 以兩種獨立的方式處理 TypeScript 原始碼
tsc
有 --watch
模式,會監控輸入檔案,並在檔案變更時將其編譯成輸出檔案。因此,每當我們在 IDE 中儲存 TypeScript 檔案時,我們會立即取得對應的輸出檔案。tsc
。為此,它必須安裝在我們目前正在處理的專案內部或全域(透過 Node.js 套件管理員 npm)。給定 TypeScript 檔案 main.ts
,TypeScript 編譯器可以產生數種成品。最常見的是
main.js
main.d.ts
(包含類型資訊;想成減去 JavaScript 程式碼的 .ts
檔案)main.js.map
TypeScript 通常不是透過 .ts
檔案傳遞,而是透過 .js
檔案和 .d.ts
檔案
原始碼清單會針對 main.js
中輸出的程式碼各部分,說明 main.ts
中輸入程式碼的哪一部分產生了它。除了其他資訊外,此資訊還能讓執行時間環境執行 JavaScript 程式碼,同時在錯誤訊息中顯示 TypeScript 程式碼的行號。
npm 登錄資料庫是 JavaScript 程式碼的龐大存放庫。如果我們要從 TypeScript 使用 JavaScript 套件,我們需要它的類型資訊
.d.ts
檔案,甚至包含完整的 TypeScript 程式碼。DefinitelyTyped 的宣告檔案位於 @types
名稱空間中。因此,如果我們需要套件的宣告檔案,例如 lodash
,我們必須安裝套件 @types/lodash
。
TypeScript 編譯器也可以處理純 JavaScript 檔案
使用選項 --allowJs
,TypeScript 編譯器會將輸入目錄中的 JavaScript 檔案複製到輸出目錄中。好處:從 JavaScript 移轉到 TypeScript 時,我們可以從 JavaScript 和 TypeScript 檔案的組合開始,然後慢慢將更多 JavaScript 檔案轉換為 TypeScript。
使用選項 --checkJs
,編譯器會另外類型檢查 JavaScript 檔案(--allowJs
必須開啟才能使用此選項)。它會盡可能執行,考量到可用的資訊有限。哪些檔案會被檢查,可以透過檔案內的註解進行設定
// @ts-nocheck
,它將不會被類型檢查。--checkJs
,註解 // @ts-check
可用於類型檢查個別 JavaScript 檔案。TypeScript 編譯器使用透過 JSDoc 註解指定的靜態類型資訊(請參閱下方範例)。如果我們徹底執行,我們可以完全靜態類型化純 JavaScript 檔案,甚至從中衍生宣告檔案。
使用選項 --noEmit
,編譯器不會產生任何輸出,它只會類型檢查檔案。
以下是 JSDoc 註解的範例,它提供函式 add()
的靜態類型資訊
/**
* @param {number} x - The first operand
* @param {number} y - The second operand
* @returns {number} The sum of both operands
*/
function add(x, y) {
+ y;
return x }
更多資訊:TypeScript 手冊中的「類型檢查 JavaScript 檔案」。