# Study Resources
- TypeScript in 100 Seconds
https://www.youtube.com/watch?v=zQnBQ4tB3ZA&t=47s
- A beginners guide to Typescript | Why use it?
https://www.youtube.com/watch?v=ZY1Om-AOpBY
- TypeScript - The Basics
https://www.youtube.com/watch?v=ahCwqrYpIuM
- TypeScript Documentation
https://www.typescriptlang.org/docs/
- TypeScript Introduction
https://www.w3schools.com/typescript/typescript_intro.php
- TypeScript | Cheat Sheet
https://www.typescriptlang.org/cheatsheets/
- perplexity suggests
https://www.perplexity.ai/search/i-m-new-to-type-script-give-me-IgKiGo3QSC2r6BB1wLCC6w?0=d&login-new=false&login-source=sourcesViewMore
---
## 🔷 What's TypeScript?
### English:
TypeScript is a **superset of JavaScript** developed by Microsoft. It adds **static typing** and **additional features** to JavaScript, enabling developers to catch errors early and write more robust, scalable code. TypeScript code is compiled (or transpiled) into standard JavaScript before execution.
### 中文(繁體):
TypeScript 是由微軟開發的 **JavaScript 超集**。它在 JavaScript 的基礎上增加了 **靜態型別** 和其他強大功能,讓開發者能在編譯時捕捉錯誤,撰寫更健壯且可擴展的程式碼。TypeScript 程式碼需先轉譯為標準的 JavaScript 才能執行。
---
# What's TypeScript?
## 🔷 What are TypeScript’s features?
### English:
* **Static Typing**: Variables, function parameters, and return types can be explicitly typed.
* **Type Inference**: TypeScript can infer types even when not explicitly defined.
* **Interfaces and Types**: For defining structured contracts in code.
* **Advanced IDE Support**: Better autocompletion, navigation, and refactoring in editors like VS Code.
* **Compile-Time Checking**: Catches errors before runtime.
* **Modern JavaScript Features**: Supports ES6+ syntax and features.
* **Decorators and Metadata**: Experimental support for advanced OOP features.
### 中文(繁體):
* **靜態型別**:變數、函式參數與回傳值可以明確定義型別。
* **型別推斷**:即使未明確宣告型別,TypeScript 也可自動判斷。
* **介面與型別別名**:用來定義結構化的型別合約。
* **強大的編輯器支援**:在 VS Code 等 IDE 中提供更佳的自動完成、導覽與重構功能。
* **編譯時檢查**:可在執行前偵測錯誤。
* **支援現代 JavaScript 語法**:支援 ES6 以上的語法與功能。
* **裝飾器與中繼資料**:實驗性支援進階的物件導向功能。
---
## 🔷 Why and when to use TypeScript?
### English:
**Why:**
* Reduces runtime bugs.
* Improves code quality and maintainability.
* Enhances developer productivity and collaboration.
* Ideal for large-scale applications.
**When:**
* When working on **complex or long-term projects**.
* In **teams**, to ensure consistent code.
* When integrating with **modern frameworks** (e.g., Angular, React, Vue).
* When code **reliability and readability** are priorities.
### 中文(繁體):
**為什麼使用:**
* 減少執行階段錯誤。
* 提高程式碼品質與可維護性。
* 增進開發效率與團隊協作。
* 適合大型應用程式開發。
**什麼時候使用:**
* 當你開發**複雜或長期維護的專案**。
* **團隊開發**時,需要統一的程式風格與型別。
* 搭配 **現代框架**(如 Angular、React、Vue)使用。
* 需要提高程式碼的 **可讀性與可靠性** 時。
---
## 🔷 What's the difference between TypeScript & JavaScript?
### English:
| Aspect | JavaScript | TypeScript |
| --------------- | ------------------------------- | --------------------------------------- |
| Typing | Dynamically typed | Statically typed (with optional typing) |
| Error Detection | Runtime | Compile-time |
| Compilation | Interpreted directly by browser | Needs to be compiled to JavaScript |
| Tooling Support | Basic | Advanced (IDE, type checks, refactors) |
| Learning Curve | Lower | Higher (due to type system) |
| Use Case | Simple to intermediate apps | Complex, large-scale applications |
### 中文(繁體):
| 比較項目 | JavaScript | TypeScript |
| ---- | ---------- | ----------------- |
| 型別系統 | 動態型別 | 靜態型別(可選擇性使用) |
| 錯誤偵測 | 執行階段發現 | 編譯階段檢查 |
| 編譯需求 | 瀏覽器可直接執行 | 必須先轉譯為 JavaScript |
| 工具支援 | 基本 | 進階(IDE、自動完成、重構等) |
| 學習曲線 | 低 | 較高(因型別系統) |
| 適用場景 | 簡單或中型應用 | 複雜或大型應用程式 |
---
## ✅ Summary Table
| Topic | JavaScript | TypeScript |
| --------------- | ------------------------ | ------------------------------------------ |
| Language Type | Scripting language | Superset of JavaScript |
| Typing | Dynamic | Static (with type annotations) |
| Compilation | Not required | Required (transpiles to JS) |
| Error Detection | At runtime | At compile time |
| Tooling | Basic | Advanced IDE support |
| Use Case | Small to medium projects | Large, scalable, maintainable applications |
| Learning Curve | Easy to learn | Requires additional type system knowledge |
---
## 🔷 What is a **"type"**?
### 📘 English:
In programming, a **type** defines the **kind of value** a variable can hold. It tells the computer what kind of data to expect—like a **number**, **string**, **boolean**, **array**, or **object**.
Examples of common types:
* `number`: Numeric values like `42`, `3.14`
* `string`: Text like `"hello"`
* `boolean`: `true` or `false`
* `array`: A list like `[1, 2, 3]`
* `object`: A structure like `{ name: "John", age: 30 }`
Types help ensure that the program behaves correctly and predictably.
---
### 📗 中文(繁體):
在程式設計中,「**型別(type)**」定義了一個變數可以儲存的**資料種類**。它告訴電腦預期收到什麼樣的資料,例如:**數字**、**字串**、**布林值**、**陣列**或**物件**。
常見的型別包括:
* `number`:數值,例如 `42`、`3.14`
* `string`:文字,例如 `"hello"`
* `boolean`:布林值,`true` 或 `false`
* `array`:陣列,例如 `[1, 2, 3]`
* `object`:物件,例如 `{ name: "John", age: 30 }`
型別有助於確保程式行為正確、穩定。
---
## 🔷 What are **type annotations**?
### 📘 English:
A **type annotation** is the **explicit declaration** of a variable's type in your code. It tells the compiler what type the variable is **supposed** to be.
In TypeScript:
```ts
let age: number = 25;
let name: string = "Alice";
let isOnline: boolean = true;
```
Here, `: number`, `: string`, and `: boolean` are **type annotations**. They help the compiler catch type-related errors before running the code.
---
### 📗 中文(繁體):
**型別註記(type annotation)**是指你在程式中**明確標示變數型別**的做法。這讓編譯器知道這個變數**應該是什麼型別**。
在 TypeScript 中:
```ts
let age: number = 25;
let name: string = "Alice";
let isOnline: boolean = true;
```
其中 `: number`、`: string`、`: boolean` 就是 **型別註記**。這樣可以幫助編譯器在執行前偵測型別錯誤,提升程式的安全性與可維護性。
---
## ✅ Summary
| Concept | English Definition | 中文定義 |
| ------------------- | -------------------------------------------------------------------------------- | --------------------------- |
| **Type** | The category of data a variable holds (e.g., number, string, boolean) | 變數所儲存的資料類型(如:數字、字串、布林值) |
| **Type Annotation** | Explicitly stating the type of a variable in code (e.g., `: number`, `: string`) | 在程式中明確標示變數型別(例如 `: number`) |
---
## 🔷 When to Use TypeScript vs JavaScript
### 📘 English
### ✅ Use **TypeScript** when:
* You're building a **large-scale application** with many files and modules.
* You're working with a **team**, and want **strong type safety** and **developer tooling**.
* You need **predictable behavior**, and want to **catch errors before runtime**.
* You're using modern frameworks like **Angular**, **React**, or **Vue** in large apps.
* You want **maintainable**, **self-documenting** code that scales over time.
### ✅ Use **JavaScript** when:
* You’re building a **small script** or **simple application**.
* You want to **prototype quickly** without setting up a build step.
* You're working on **front-end logic** that runs directly in the browser.
* You're learning the **basics of programming or the web**.
* You're writing **non-critical, one-time code** (e.g., quick automation).
---
### 📗 中文(繁體)
### ✅ 什麼時候使用 **TypeScript**:
* 當你開發一個**大型應用程式**,包含很多檔案與模組時。
* 當你在一個**團隊合作**的專案中,需要**嚴謹的型別檢查**與**強大開發工具支援**。
* 當你需要**可預測的行為**,並希望在**執行前發現錯誤**。
* 當你使用像 **Angular**、**React** 或 **Vue** 等現代框架建構大型應用。
* 當你希望程式碼具備良好的**可維護性**與**可讀性**。
### ✅ 什麼時候使用 **JavaScript**:
* 當你只需要開發一個**小工具或簡單應用**。
* 當你想**快速原型開發**,不想設定轉譯環境。
* 當你編寫的是直接**在瀏覽器中執行的前端程式碼**。
* 當你還在學習**程式設計或前端技術的基礎**。
* 當你撰寫的是**一次性、非關鍵性的小程式**(例如自動化腳本)。
---
## 🧪 Code Example: JavaScript vs TypeScript
### 🔹 JavaScript (No type checking)
```javascript
function greet(user) {
return "Hello, " + user.toUpperCase(); // Runtime error if user is not a string
}
console.log(greet(123)); // Error at runtime
```
### 🔹 TypeScript (With type annotations and compile-time error)
```typescript
function greet(user: string): string {
return "Hello, " + user.toUpperCase();
}
console.log(greet(123)); // ❌ Compile-time error: Argument of type 'number' is not assignable to parameter of type 'string'
```
> TypeScript catches the problem **before execution** — making your code safer.
---
## ✅ Summary Table
| Criteria | Use **JavaScript** | Use **TypeScript** |
| -------------------- | ------------------ | ----------------------------------------- |
| Project Size | Small / simple | Medium to large / complex |
| Development Speed | Fast prototyping | Structured, scalable development |
| Error Detection | Runtime | Compile-time |
| Code Maintainability | Low to medium | High (strong typing and tooling) |
| Tooling Support | Basic | Advanced (autocompletion, refactor, lint) |
| Team Collaboration | Less safe | Safer with enforced types |
| Learning Curve | Easy | Requires understanding of types |
| Setup Required | None | Requires build tools (e.g., tsconfig) |
---
---
# 🔑 Essential TypeScript Syntax & Features for Beginners
### 📘 English + 📗 中文(繁體)
---
### 1. **Basic Type Annotations**
Tell TypeScript what type a variable should be.
```ts
let age: number = 25;
let name: string = "Alice";
let isActive: boolean = true;
```
📗 用來指定變數的資料型別,例如數字、字串、布林值。
---
### 2. **Function Type Annotations**
Specify parameter and return types for functions.
```ts
function greet(name: string): string {
return "Hello, " + name;
}
```
📗 在函式中標註參數與回傳值的型別,有助於防止錯誤。
---
### 3. **Interfaces**
Define a structure (contract) for an object.
```ts
interface User {
id: number;
name: string;
}
const user: User = { id: 1, name: "John" };
```
📗 `interface` 定義物件的結構,確保物件具有正確的屬性與型別。
---
### 4. **Optional & Default Parameters**
Mark parameters as optional or assign default values.
```ts
function log(message: string, userId?: number) {
console.log(message, userId);
}
function multiply(a: number, b: number = 1): number {
return a * b;
}
```
📗 使用 `?` 表示參數可選,用 `=` 設定預設值。
---
### 5. **Type Aliases (`type`)**
Create reusable custom types.
```ts
type ID = number | string;
let userId: ID = 101;
```
📗 使用 `type` 建立自訂型別,尤其適用於聯合型別(多種可能型別)。
---
### 6. **Union & Literal Types**
A variable can accept **more than one** type or **specific values only**.
```ts
let status: "success" | "error" = "success";
let id: number | string = 123;
```
📗 聯合型別允許變數擁有多種型別。字面型別限制變數只能取某些值。
---
### 7. **Arrays and Tuples**
Define typed arrays and fixed-structure tuples.
```ts
let scores: number[] = [100, 98, 95];
let person: [string, number] = ["Alice", 25];
```
📗 陣列使用 `type[]` 表示,Tuple 則是固定型別與順序的陣列。
---
### 8. **Enums**
Create named constants for readability.
```ts
enum Direction {
Up,
Down,
Left,
Right
}
let move: Direction = Direction.Up;
```
📗 `enum` 是列舉型別,用來定義一組可讀性高的常數。
---
### 9. **Type Inference**
TypeScript can guess the type if a value is assigned.
```ts
let message = "Hello"; // inferred as string
```
📗 不需要每次都標註型別,TypeScript 會根據賦值自動推斷。
---
### 10. **Any & Unknown Types**
Use when the type is uncertain — but be cautious.
```ts
let data: any = 123;
let value: unknown = "text";
```
📗 `any` 允許任何型別(沒保障),`unknown` 較安全,但需先檢查型別才能使用。
---
### 11. **Type Assertions**
Tell TypeScript to treat a value as a specific type.
```ts
let someValue: any = "hello";
let strLength: number = (someValue as string).length;
```
📗 類似型別轉換,用於你確信變數的實際型別時。
---
### 12. **Generics**
Write reusable, type-safe code.
```ts
function identity<T>(value: T): T {
return value;
}
let output = identity<string>("hello");
```
📗 `Generics` 泛型讓函式或類別支援不同型別的資料,並保持型別安全。
---
## ✅ Summary Table
| Feature | Syntax Example | 中文解說 | |
| ------------------ | ------------------------------------------ | ---------- | ---- |
| Variable Type | `let name: string = "Alice"` | 變數型別 | |
| Function Type | `function greet(name: string): string` | 函式型別 | |
| Interface | `interface User { name: string }` | 定義物件結構 | |
| Optional Parameter | `function log(msg: string, id?: number)` | 可選參數 | |
| Type Alias | \`type ID = number | string\` | 自訂型別 |
| Union Type | \`let x: number | string\` | 聯合型別 |
| Array / Tuple | `let scores: number[]`, `[string, number]` | 陣列與 Tuple | |
| Enum | `enum Color { Red, Blue }` | 列舉型別 | |
| Type Inference | `let x = true` | 型別推斷 | |
| Any / Unknown | `let x: any`, `let y: unknown` | 任意型別/未知型別 | |
| Type Assertion | `(value as string).length` | 型別斷言(類型轉換) | |
| Generics | `function identity<T>(value: T): T` | 泛型 | |