在 Visual Studio Code 中使用 TypeScript 教學

TypeScript 是 JavaScript 的型別超集,可編譯為純 JavaScript。它提供類別、模組與介面,協助您建構強健的元件。

安裝 TypeScript 編譯器

Visual Studio Code 內建 TypeScript 語言支援,但不包含 TypeScript 編譯器 tsc。您需要全域或在工作區中安裝 TypeScript 編譯器,才能將 TypeScript 原始碼轉譯為 JavaScript (tsc HelloWorld.ts)。

安裝 TypeScript 最簡單的方法是透過 npm,即 Node.js 套件管理員。如果您已安裝 npm,可以透過下列指令在電腦上全域 (-g) 安裝 TypeScript:

npm install -g typescript

您可以檢查版本來測試安裝是否成功。

tsc --version

Hello World

讓我們從一個簡單的 Node.js "Hello World" 範例開始。建立一個新資料夾 HelloWorld 並啟動 VS Code。

mkdir HelloWorld
cd HelloWorld
code .

從檔案總管中,建立一個名為 helloworld.ts 的新檔案。

create new file

現在加入以下 TypeScript 程式碼。您會注意到 TypeScript 的關鍵字 let 以及 string 型別宣告。

let message: string = 'Hello World';
console.log(message);

若要編譯您的 TypeScript 程式碼,您可以開啟 整合終端機 (⌃` (Windows, Linux Ctrl+`)) 並輸入 tsc helloworld.ts。這將會編譯並產生一個新的 helloworld.js JavaScript 檔案。

compiled hello world

如果您已安裝 Node.js,可以執行 node helloworld.js

run hello world

如果您開啟 helloworld.js,會發現它看起來與 helloworld.ts 沒有太大差異。型別資訊已被移除,而 let 已變成了 var

var message = 'Hello World';
console.log(message);

IntelliSense

在 VS Code 中,您可以看到語法反白與括號配對等語言功能。在編輯器中輸入時,您可能已注意到 IntelliSense(由 VS Code 與 TypeScript 語言伺服器提供的智慧程式碼補全與建議)。在下方您可以看到 console 的方法。

IntelliSense

當您選取一個方法時,會獲得參數說明,並且隨時可以查看懸浮提示資訊。

parameter help

tsconfig.json

在本教學課程到目前為止,您一直依賴 TypeScript 編譯器的預設行為來編譯 TypeScript 原始碼。您可以透過加入一個 tsconfig.json 檔案來修改 TypeScript 編譯器選項,該檔案定義了 TypeScript 的專案設定,例如編譯器選項以及應該包含的檔案。

重要事項:若要在本教學課程的其餘部分使用 tsconfig.json,請在執行 tsc 時不要加上輸入檔案。TypeScript 編譯器會自動查看 tsconfig.json 以獲取專案設定與編譯器選項。

新增一個簡單的 tsconfig.json,將選項設定為編譯至 ES5 並使用 CommonJS 模組

{
  "compilerOptions": {
    "target": "ES5",
    "module": "CommonJS"
  }
}

編輯 tsconfig.json 時,IntelliSense (⌃Space (Windows, Linux Ctrl+Space)) 將會在過程中協助您。

tsconfig.json IntelliSense

預設情況下,如果未包含 files 屬性,TypeScript 會包含目前資料夾及子資料夾中的所有 .ts 檔案,因此我們不需要明確列出 helloworld.ts

變更建置輸出

若產生的 JavaScript 檔案與 TypeScript 原始碼位於同一個資料夾,在大型專案中很快就會變得雜亂,因此您可以使用 outDir 屬性為編譯器指定輸出目錄。

{
  "compilerOptions": {
    "target": "ES5",
    "module": "CommonJS",
    "outDir": "out"
  }
}

刪除 helloworld.js 並執行不帶任何選項的 tsc 指令。您將會看到 helloworld.js 現在已放置於 out 目錄中。

請參閱轉譯 TypeScript (Transpiling TypeScript) 以了解 TypeScript 語言服務的其他功能,以及如何使用工作 (tasks) 直接從 VS Code 執行您的建置。

錯誤檢查

TypeScript 透過強型別檢查協助您避免常見的程式設計錯誤。例如,如果您將一個數字指派給 message,TypeScript 編譯器會發出警告:'error TS2322: Type '2' is not assignable to type 'string'。您可以在 VS Code 的編輯器中(紅色波浪線與懸浮提示資訊)以及「問題」面板中看到型別檢查錯誤(⇧⌘M (Windows, Linux Ctrl+Shift+M))。[ts] 前綴代表此錯誤來自 TypeScript 語言伺服器。

incorrect type error

快速修復

TypeScript 語言服務擁有一套強大的診斷功能,可找出常見的編碼問題。例如,它能分析您的原始碼並偵測出無法存取的程式碼,這類程式碼在編輯器中會以變暗顯示。如果您將滑鼠游標懸停在該行程式碼上,會看到解釋說明;如果您將游標置於該行,則會出現一個「快速修復」燈泡。

unreachable code detected

點擊燈泡或按下 ⌘. (Windows, Linux Ctrl+.) 會彈出「快速修復」選單,您可以在其中選取移除無法存取的程式碼修復選項。

此外,程式碼動作小工具:包含附近的快速修復 (editor.codeActionWidget.includeNearbyQuickFixes) 是一項預設啟用的設定,這讓您無論游標在哪一行,只要按下 ⌘. (Windows, Linux Ctrl+.) (指令 ID editor.action.quickFix),即可啟動該行中最靠近的快速修復。

此指令會反白顯示將透過快速修復進行重構或修復的原始碼。一般的程式碼動作與非修復性的重構仍然可以在游標位置啟動。

偵錯

VS Code 內建 TypeScript 偵錯支援。為了支援結合執行中的 JavaScript 程式碼來對 TypeScript 進行偵錯,VS Code 依賴 來源對應表 (source maps),讓偵錯器能在原始 TypeScript 原始碼與執行中的 JavaScript 之間進行對應。您可以在建置期間透過在 tsconfig.json 中設定 "sourceMap": true 來建立來源對應表。

{
  "compilerOptions": {
    "target": "ES5",
    "module": "CommonJS",
    "outDir": "out",
    "sourceMap": true
  }
}

重新執行 tsc 進行建置,現在您應該會在 out 目錄中 helloworld.js 的旁邊看到一個 helloworld.js.map 檔案。

在編輯器中開啟 helloworld.ts,然後按下 F5。如果您安裝了其他偵錯器擴充功能,則需要從下拉選單中選取 Node.js

偵錯器將啟動工作階段、執行您的程式碼,並在「偵錯主控台」面板中顯示 "Hello World" 訊息。

debug console output

helloworld.ts 中,透過點擊編輯器左側的邊界來設定中斷點。如果設定成功,您會看到一個紅色圓圈。再次按下 F5。程式執行將會在到達中斷點時暫停,您將能夠在執行與偵錯檢視 (⇧⌘D (Windows, Linux Ctrl+Shift+D)) 中查看變數值與呼叫堆疊等偵錯資訊。

debug breakpoint

請參閱對 TypeScript 進行偵錯 (Debugging TypeScript),以進一步了解 VS Code 對 TypeScript 的內建偵錯支援,以及如何針對您的專案情境設定偵錯器。

後續步驟

本教學課程是關於使用 VS Code 進行 TypeScript 開發的快速入門。請繼續閱讀以了解更多關於使用 VS Code 編譯與偵錯 TypeScript 的支援功能。

常見問題

無法啟動程式,因為找不到對應的 JavaScript

您很可能未在 tsconfig.json 中設定 "sourceMap": true,導致 VS Code 的 Node.js 偵錯器無法將您的 TypeScript 原始碼對應至執行中的 JavaScript。請開啟來源對應表並重新建置您的專案。

© . This site is unofficial and not affiliated with Microsoft.