常用的Utility和範例 | TypeScript

使 TypeScript 的其中一個關鍵特點就是它的 Utility 。我們將介紹20個 TypeScript Utility 和範例,並講解使用的優勢。

理解 TypeScript Utility

TypeScript 泛型(Generics) 和 實用(Utility) 型別,在 TypeScript 的核心是泛型(Generics)的概念,提供了代碼的靈活性和可重用性。實用型別則補充了泛型,為常見的類型操作提供了預定好的工具。

1. Partial - 使屬性可選

Partial 實用型別允許我們使型別 T 中的所有屬性都變為可選。
這讓我們在處理數據結構時保有原本物件的靈活性。

interface User {
    name: string;
    age: number;
}

const partialUser: Partial<User> = { name: 'John' };

2. Required - 確保必填屬性

相反,Required 確保型別 T 中的所有屬性都是必須的。

interface User {
    name?: string;
    age?: number;
}

const requiredUser: Required<User> = { name: 'John', age: 30 };

3. Readonly - 不可變性保證

Readonly 將型別 T 中的所有屬性轉換為唯讀,使其成為不可變。

interface Configuration {
    apiKey: string;
    endpoint: string;
}

const readOnlyConfig: Readonly<Configuration> = { apiKey: '123', endpoint: 'https://example.com' };

4. Record<K, T> - 物件鍵值對

Record 實用型別創建一個帶有特定鍵值對的物件,促使以結構化的方式存儲數據。

type Fruit = 'apple' | 'banana' | 'orange';
const fruitCount: Record<Fruit, number> = { apple: 5, banana: 3, orange: 8 };

5. Pick<T, K> - 選擇特定屬性

使用 Pick,從一個型別中選擇特定的屬性。

interface User {
    name: string;
    age: number;
    address: string;
}

const pickedUser: Pick<User, 'name' | 'age'> = { name: 'John', age: 30 };

6. Omit<T, K> - 排除特定屬性

Omit 實用型別則相反,從一個型別中排除特定的屬性。

interface User {
    name: string;
    age: number;
    address: string;
}

const omittedUser: Omit<User, 'address'> = { name: 'John', age: 30 };

進階 TypeScript Utility:

1.Exclude<T, U> - 從聯合類型中排除類型

Exclude 可以從一個聯合類型中過濾掉某些類型,提供了一種簡潔的方式來縮小選擇範圍。

type Numbers = 1 | 2 | 3 | 4 | 5;
type NonEvenNumbers = Exclude<Numbers, 2 | 4>;

2. Extract<T, U> - 从联合类型中提取类型

相反的,Extract可以從聯合類型中提取特定的類型,提高代碼的靈活性。

type Numbers = 1 | 2 | 3 | 4 | 5;
type EvenNumbers = Extract<Numbers, 2 | 4>;

3. NonNullable - 消除 null 和 undefined

NonNullable 排除了 null 和 undefined。

type NullableString = string | null | undefined;
type NonNullableString = NonNullable<NullableString>;

4. ReturnType - 捕獲函數返回類型

使用 ReturnType,返回函數的類型。

function greet(): string {
    return 'Hello, TypeScript!';
}

type Greeting = ReturnType<typeof greet>; // string

結論:

通過採用TypeScript Utility 開發人員可以提升程式碼類型安全性,並簡化複雜的型別操作。大大減低開發時間和讓你的代碼看起來更簡潔優雅。