這些工具類型是 TypeScript 提供的強大功能,用于操作和轉換類型。下面是每個工具類型的簡要說明和示例:
1、Record
let value: Record<string, any> = { name: "", age: 0, desc: [] };
let value2: { [key: string]: any } = { name: "", age: 0, desc: [] };
2、Partial<T>: 將類型 T 的所有屬性設置為可選。
interface Person {name: string;age: number;}type PartialPerson = Partial<Person>; // { name?: string; age?: number; }let value: PartialPerson = {};let value2: PartialPerson = { name: "" };let value3: PartialPerson = { age: 0 };
3、?Required<T>: 將類型 T 的所有屬性設置為必選。
interface PartialPerson {name?: string;age?: number;
}type RequiredPerson = Required<PartialPerson>; // { name: string; age: number; }let value: RequiredPerson = { name: "", age: 0 };
4、?Exclude<T, U>: 從類型 T 中排除?U 的類型。
type T = string | number | boolean;type U = string | number;type Excluded = Exclude<T, U>; // 結果為 booleanlet value: Excluded = false;
5、Omit<T, K>: 從類型 T 中移除屬性 K。
interface Person {name: string;age: number;address: string;}type WithoutAddress = Omit<Person, 'address'>; // 結果為 { name: string; age: number; }let value: WithoutAddress = { name: "", age: 0 };
6、Readonly<T>: 將類型 T 的所有屬性設置為只讀。
interface Person {readonly name: string;readonly age: number;}type ReadonlyPerson = Readonly<Person>;let value: ReadonlyPerson = { name: '', age: 0 };
7、?Pick<T, K>: 從類型 T 中選取指定屬性 K 構造新類型。
interface Person {name: string;age: number;address: string;
}type NameAndAge = Pick<Person, 'name' | 'age'>; // { name: string; age: number; }let value: NameAndAge = { name: '', age: 0 };
8、NonNullable<T>: 從類型 T 中排除 null 和 undefined。
type NullableString = string | null | undefined;
type NonNullableString = NonNullable<NullableString>; // 結果為 stringlet value: NonNullableString = '';
9、ReturnType<T>: 獲取函數類型 T 的返回值類型。
type Func = () => string;
type Result = ReturnType<Func>; // 結果為 stringlet value: Result = '';
?10、Parameters<T>: 獲取函數類型 T 的參數類型組成的元組。
type Func = (x: number, y: string) => boolean;
type Args = Parameters<Func>; // 結果為 [number, string]let value: Args = [0, ''];
?11、Overwrite<T, U>: 使用 U 中的屬性覆蓋 T 中的對應屬性。
type T = { a: number; b: string };
type U = { b: boolean; c: string };
type Overwrite<T, U> = Omit<T, keyof U> & U;
type OverwriteType = Overwrite<T, U>; // 結果為 { a: number; b: boolean; c: string; }let value: OverwriteType = { a: 0, b: true, c: '' };
12、Intersection<T, U>: 返回 T 和 U 的交集類型。
type T = { a: number; b: string };
type U = { b: boolean; c: string };
type Intersection<T, U> = Omit<T, keyof Omit<T, keyof U>>;
type Intersected = Intersection<T, U>; // 結果為 { b: string; }let value: Intersected = { b: '' };