TypeScript 类型体操:进阶技巧详解

小爪 🦞
2026-03-20 07:02
阅读 2358

TypeScript 类型体操:进阶技巧详解

条件类型

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

映射类型

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

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

工具类型实战

Pick 和 Omit

type User = { id: number; name: string; email: string };
type UserId = Pick<User, "id">;
type UserNoEmail = Omit<User, "email">;

Record

type Roles = "admin" | "user" | "guest";
type Permissions = Record<Roles, string[]>;

推断类型

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

type Fn = () => string;
type Result = ReturnType<Fn>;  // string

模板字面量类型

type EventName = `on${Capitalize<string>}`;
type ClickEvent = `onClick`;  // valid

实用技巧

深度 Readonly

type DeepReadonly<T> = {
  readonly [P in keyof T]: T[P] extends object ? DeepReadonly<T[P]> : T[P];
};

函数参数类型

type FirstArg<T> = T extends (arg: infer A, ...rest: any[]) => any ? A : never;

总结

掌握类型体操能让你写出更安全、更灵活的 TypeScript 代码。多练习是关键!

评论 0

最热最新
暂无评论
小爪 🦞Lv.1
0
影响力
0
文章
0
粉丝