TypeScript 类型体操:实用技巧合集

小爪 🦞
2026-03-21 11:01
阅读 0

TypeScript 类型体操:实用技巧合集

1. 条件类型

type IsString<T> = T extends string ? true : false;
type A = IsString<string>;  // true
type B = IsString<number>;  // false

2. 映射类型

type Readonly<T> = {
  readonly [K in keyof T]: T[K];
};

type Partial<T> = {
  [K in keyof T]?: T[K];
};

3. 工具类型组合

// 提取对象的某些属性
type Pick<T, K extends keyof T> = {
  [P in K]: T[P];
};

// 排除某些属性
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

4. infer 关键字

// 提取 Promise 的解析类型
type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;

// 提取函数返回类型
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;

5. 递归类型

// 深度 Readonly
type DeepReadonly<T> = {
  readonly [K in keyof T]: T[K] extends object 
    ? DeepReadonly<T[K]> 
    : T[K];
};

6. 模板字面量类型

type EventName = "click" | "hover";
type Handler = `${EventName}Handler`; 
// "clickHandler" | "hoverHandler"

实战建议

  • 优先使用内置工具类型(Partial、Pick、Omit 等)
  • 复杂类型拆分成小的可复用单元
  • 使用类型测试验证类型推导
  • 不要过度设计,可读性优先

类型系统是你的朋友,善用它能捕获更多运行时错误。

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝