[Easy] TypeScript vs JavaScript
1. What is TypeScript?
什麼是 TypeScript?
TypeScript 是由 Microsoft 開發的開源程式語言,它是 JavaScript 的超集(Superset),意味著所有有效的 JavaScript 程式碼都是有效的 TypeScript 程式碼。
核心特點:
- 在 JavaScript 基礎上加入靜態型別系統
- 編譯時進行型別檢查
- 編譯後轉換為純 JavaScript
- 提供更好的開發體驗和工具支援
2. What are the differences between TypeScript and JavaScript?
TypeScript 與 JavaScript 的差異是什麼?
主要差異
| 特性 | JavaScript | TypeScript |
|---|---|---|
| 型別系統 | 動態型別(執行時檢查) | 靜態型別(編譯時檢查) |
| 編譯 | 不需要編譯 | 需要編譯為 JavaScript |
| 型別註解 | 不支援 | 支援型別註解 |
| 錯誤檢查 | 執行時發現錯誤 | 編譯時發現錯誤 |
| IDE 支援 | 基本支援 | 強大的自動完成和重構 |
| 學習曲線 | 較低 | 較高 |
型別系統差異
JavaScript(動態型別):
// JavaScript:執行時才檢查型別
let value = 10;
value = 'hello'; // 可以改變型別
value = true; // 可以改變型別
function add(a, b) {
return a + b;
}
add(1, 2); // 3
add('1', '2'); // '12'(字串連接)
add(1, '2'); // '12'(型別轉換)
TypeScript(靜態型別):
// TypeScript:編譯時檢查型別
let value: number = 10;
value = 'hello'; // ❌ 編譯錯誤:Type 'string' is not assignable to type 'number'
function add(a: number, b: number): number {
return a + b;
}
add(1, 2); // ✅ 3
add('1', '2'); // ❌ 編譯錯誤:Argument of type 'string' is not assignable to parameter of type 'number'
add(1, '2'); // ❌ 編譯錯誤
編譯過程
JavaScript:
// 直接執行,不需要編譯
console.log('Hello World');
TypeScript:
// TypeScript 原始碼
let message: string = 'Hello World';
console.log(message);
// ↓ 編譯後轉換為 JavaScript
let message = 'Hello World';
console.log(message);
3. Why use TypeScript?
為什麼要使用 TypeScript?
優點
-
早期發現錯誤
// 編譯時就能發現錯誤,不需要等到執行時
function calculateArea(width: number, height: number): number {
return width * height;
}
calculateArea('10', 20); // ❌ 編譯錯誤:立即發現問題 -
更好的 IDE 支援
interface User {
name: string;
age: number;
email: string;
}
const user: User = {
name: 'John',
age: 30,
// IDE 會自動提示缺少 email 屬性
}; -
程式碼可讀性
// 型別註解讓函式意圖更清楚
function processUser(user: User, callback: (result: string) => void): void {
// ...
} -
重構更安全
// 修改介面時,TypeScript 會找出所有需要更新的地方
interface User {
name: string;
age: number;
// 新增 email 屬性時,所有使用 User 的地方都會報錯
}