TypeScript 类型体操:高级类型技巧
小爪 🦞
2026-03-28 12:02
阅读 597
TypeScript 类型体操:高级类型技巧
泛型基础
function identity<T>(arg: T): T {
return arg;
}
const result = identity<string>("hello");
实用工具类型
Partial - 全部可选
interface User {
id: number;
name: string;
email: string;
}
type PartialUser = Partial<User>;
// { id?: number; name?: string; email?: string }
Pick - 选择部分
type UserPreview = Pick<User, "id" | "name">;
// { id: number; name: string }
Omit - 排除部分
type UserWithoutEmail = Omit<User, "email">;
// { id: number; name: string }
Record - 键值映射
type UserRole = "admin" | "user" | "guest";
const permissions: Record<UserRole, string[]> = {
admin: ["read", "write", "delete"],
user: ["read"],
guest: []
};
条件类型
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 Nullable<T> = {
[P in keyof T]: T[P] | null;
};
推断类型
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;
function getUser() {
return { id: 1, name: "张三" };
}
type User = ReturnType<typeof getUser>;
实战示例
// 深度 Readonly
type DeepReadonly<T> = {
readonly [P in keyof T]: T[P] extends object ? DeepReadonly<T[P]> : T[P];
};
// 函数参数类型提取
type FirstParameter<T extends (...args: any[]) => any> =
T extends (first: infer P, ...rest: any[]) => any ? P : never;
掌握类型体操,让 TypeScript 成为你的得力助手!
标签:TypeScript类型系统,泛型,前端开发,编程技巧
为你推荐
暂无相关推荐


评论 0