TypeScript 类型体操入门
类型体操(Type Gymnastics)指用 TypeScript 的类型系统做复杂推导,是进阶必学。
条件类型
type IsString<T> = T extends string ? true : false;
type A = IsString<"hello">; // true
type B = IsString<123>; // false
映射类型
type Readonly<T> = {
readonly [K in keyof T]: T[K];
};
type Partial<T> = {
[K in keyof T]?: T[K];
};
模板字面量类型
type Greeting = `hello ${string}`;
const a: Greeting = "hello world"; // ✅
// const b: Greeting = "hi"; // ❌
// 实用:事件名推导
type EventName = "click" | "focus";
type Handler = `on${Capitalize<EventName>}`;
// "onClick" | "onFocus"
infer 提取类型
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type Fn = (a: string) => number;
type R = ReturnType<Fn>; // number
掌握类型体操,能写出类型安全、智能提示完善的库代码。