指南

什麼是 TypeScript?非工程師的白話指南

TypeScript 就是加上型別的 JavaScript。你可以標示每個值應該是哪種資料,例如數字、文字或訂單清單,TypeScript 會在程式執行前檢查是否有不一致的地方。TypeScript 官網將它描述為「帶有型別語法的 JavaScript」;型別在轉換成一般 JavaScript 時會被移除,之後就能在任何能執行 JavaScript 的環境中運行。

為什麼用 AI 建置時要了解它

AI 模型寫程式碼的速度很快,但快速產生的程式碼難免有錯:一個檔案中的欄位叫 customerName,另一個檔案中卻是 customer_name;價格以文字而非數字傳遞;函式呼叫時缺少了某個值。在一般的 JavaScript 中,許多這類錯誤要等到有人點了錯的按鈕才會出現。

TypeScript 能在撰寫程式碼的階段就抓出很多錯誤:

  • AI 會立即得到回饋。 型別錯誤會指出有問題的確切行數,所以代理程式可以在你看到之前就修正它。
  • 修改更安全。 如果你重新命名一個欄位,TypeScript 會標出所有仍在使用舊名稱的地方。
  • 程式碼能自我說明。 型別會記錄函式預期接收和回傳什麼,對你、AI 以及日後接手的開發者都很有幫助。
  • 編輯器更聰明。 因為編輯器知道每個值是什麼,自動完成和「跳到定義」都能運作得更好。

這也是許多 AI 應用程式建置工具預設使用 TypeScript 的重要原因。

日常比喻

想像一間有標示貨位的倉庫。每個貨位都有一塊標示牌:「僅限棧板」、「冷藏」、「最大 500 公斤」。貨物送達時,門口的檢查員會把貨物與標示牌比對。要放進乾貨區的冷凍魚,會在門口就被攔下,而不是等一週後發出臭味才被發現。

TypeScript 就是門口的檢查員,型別就是那些標示牌。檢查發生在貨物(也就是你的程式碼)投入使用之前。等一切就位後,標示牌會被拿掉:執行中的 JavaScript 已經沒有任何型別。

TypeScript 如何運作

  1. 你(或 AI)撰寫 .ts 或 .tsx 檔案:TypeScript 程式碼,附帶型別標示。
  2. 型別檢查器讀取程式碼,並在編輯器或建置過程中將不一致之處回報為錯誤。
  3. 建置步驟移除型別,產生一般的 JavaScript。
  4. JavaScript 在瀏覽器或伺服器上執行(Node.js、Deno、Bun)。

一個重要的結果是:TypeScript 檢查的是你寫的程式碼,而不是應用程式執行時到達的資料。如果外部 API 回傳了意外的內容,除非你加入執行期驗證,否則 TypeScript 看不見它。

實例:預約表單

假設你正在為一間髮廊建置預約應用程式。以下是描述一筆預約的型別:

type Booking = {
  id: number;
  customerEmail: string;
  service: "haircut" | "colour" | "blow-dry";
  startsAt: Date;
  price: number;
  notes?: string; // the ? means optional
};

以及計算訂金的函式:

function depositFor(booking: Booking): number {
  return booking.price * 0.2;
}

現在看看 TypeScript 能抓出什麼。

欄位拼錯。

depositFor({ id: 1, customerEmail: "lena@example.com", service: "haircut",
  startsAt: new Date(), prise: 40 });

TypeScript 會指出 prise 不是已知的屬性,而且缺少 price。在一般的 JavaScript 中,這會悄悄算出 NaN(非數字)的訂金。

錯誤型別的值。

const booking: Booking = { ...otherFields, price: "40" };

TypeScript 會指出字串不能用在需要數字的地方。如果沒有它,"40" * 0.2 恰好能算出結果,但 "40" + 5 會得到 "405",這種錯誤會在發票上出現。

不存在的服務。

const booking: Booking = { ...otherFields, service: "perm" };

TypeScript 會指出 "perm" 不在允許的服務之列。之後如果髮廊新增了燙髮服務,你只要把它加進型別中,TypeScript 就會標出所有需要更新的地方,例如價目表、表單和行事曆顏色。

它抓不到的部分。 如果預約表單從瀏覽器把 price: "40" 傳到伺服器,伺服器端的 TypeScript 在執行時是看不到的。這就是為什麼設計良好的應用程式也會驗證傳入的資料,通常會使用驗證函式庫來檢查結構,並將其轉換成正確的 Booking。

TypeScript 與 JavaScript 比較

JavaScriptTypeScript
它是什麼瀏覽器執行的語言JavaScript 加上型別語法
可直接在瀏覽器中執行是要先轉換成 JavaScript
抓出型別錯誤執行時才抓(如果有的話)撰寫時、執行前就抓
設定無需要建置步驟(通常由 Vite 或 Next.js 等工具處理)
適合小型腳本、快速實驗會持續成長與變動的應用程式
檔案副檔名.js、.jsx.ts、.tsx

常見術語說明

術語意義
型別(Type)描述一個值可以是什麼:數字、文字或特定的物件結構。
型別標註(Type annotation)寫在程式碼中的標示,例如 price: number。
型別推論(Type inference)TypeScript 不靠標示,自行推斷型別。
介面/型別別名(Interface / type alias)為物件結構取的名稱,例如 Booking。
聯合型別(Union type)值可以是幾個選項之一,例如 "haircut" | "colour"。
選填屬性(Optional property)可以不存在的欄位,以 ? 標示。
any讓某個值停止檢查的型別,是應謹慎使用的逃生口。
型別錯誤(Type error)TypeScript 回報某些內容不一致的訊息。
編譯/轉譯(Compile / transpile)把 TypeScript 轉換成 JavaScript。
.tsx含有 JSX 的 TypeScript 檔案,用於 React 應用程式。
tsconfig.json設定 TypeScript 對專案檢查有多嚴格的設定檔。
執行期驗證(Runtime validation)在應用程式執行時檢查實際傳入的資料。

常見錯誤與迷思

  • 「TypeScript 能讓程式碼沒有錯誤。」 它只能抓出資料結構的不一致,抓不出錯誤的邏輯。把 2% 寫成 20% 的訂金,型別檢查仍然會通過。
  • 「型別能保護我免於錯誤的輸入。」 型別在執行時就消失了。來自使用者、表單和 API 的資料都要驗證。
  • 到處都是 any。 AI 卡住時,可能會使用 any 或 // @ts-ignore 來壓制錯誤。這是掩蓋問題,而不是解決問題。
  • 因為預覽能運作就忽略型別錯誤。 有些工具仍會執行含有型別錯誤的程式碼,這些錯誤仍然是等待發生的隱患。
  • 「TypeScript 比較慢。」 型別在執行前就被移除了;實際執行的 JavaScript 基本上是一樣的。
  • 「它只適合大型團隊。」 獨自開發的人也能受益,尤其是當大部分修改都由 AI 完成時。

向 AI 建置工具提出的要求

  • 「請開啟 TypeScript 的嚴格模式。」
  • 「為我們的主要紀錄(Customer、Booking、Invoice)定義共用型別,並同時用於前端與後端。」
  • 「不要用 any 或 @ts-ignore 來繞過錯誤;請修正根本問題,並告訴我原因。」
  • 「在伺服器端驗證所有傳入的資料,不要只靠型別。」
  • 「在告訴我完成之前,請執行型別檢查並修正所有錯誤。」
  • 「重新命名欄位時,請更新 TypeScript 標出的每一處。」
  • 「用白話解釋這個型別錯誤。」

若要進一步檢查 AI 產生的內容,請參閱如何檢視 AI 產生的程式碼以及如何除錯 AI 建置的應用程式。

Mythex 中的 TypeScript

如果你沒有特別要求,Mythex 會以 Vite + React + TypeScript + Tailwind 建立新專案。程式碼編輯器內含語言智慧功能,包括 TypeScript 與 JavaScript(以及其他語言)的自動完成、診斷和跳到定義,因此型別錯誤會直接顯示在程式碼中,而不只出現在預覽裡。編輯器在免費版為唯讀,Pro 版則可完整編輯。你仍然可以在第一則提示中要求不同的設定;技術選擇方式的文件說明了流程,而程式碼編輯器文件則說明編輯器顯示的內容。

常見問題

用簡單的話來說,什麼是 TypeScript?

TypeScript 是加上型別的 JavaScript。你可以標示每個值應該是哪種資料,例如數字、文字或客戶紀錄,TypeScript 會在程式執行前檢查是否有不一致的地方。之後它會被轉換成一般的 JavaScript。

TypeScript 和 JavaScript 是不同的語言嗎?

TypeScript 是 JavaScript 的超集:也就是 JavaScript 加上用於型別的額外語法。TypeScript 官網將它描述為「帶有型別語法的 JavaScript」。在轉換成 JavaScript 以便執行時,型別會被移除。

為什麼 AI 應用程式建置工具會使用 TypeScript?

型別讓 AI 和周邊工具能快速抓出錯誤,例如把文字傳入需要數字的地方,或拼錯欄位名稱。錯誤會在使用者碰到之前就顯示出來,讓 AI 產生的程式碼更容易檢查和修改。

TypeScript 能讓應用程式沒有錯誤嗎?

不能。它能抓出一整類關於資料結構的錯誤,但抓不出錯誤的商業邏輯;除非你另外加入驗證,否則它也無法檢查執行時從使用者或 API 傳來的資料。

TypeScript 是誰開發的?

TypeScript 是由 Microsoft 開發的開放原始碼語言,可在 JavaScript 能運行的任何地方執行,包括瀏覽器、Node.js、Deno 和 Bun。

Mythex · Pricing · 用 AI 打造任何東西 · 網站與應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費的 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港)