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

掌握类型体操,能写出类型安全、智能提示完善的库代码。