工具类型让「类型」可以像数据一样被加工:Partial
工程中最常见的一组搭配:后端接口返回完整 User,创建表单用 Partial
interface User {
id: number;
name: string;
age: number;
email: string;
}
type UserDraft = Partial<User>; // 所有属性可选
type UserPreview = Pick<User, 'name' | 'age'>; // 只留两个字段
type UserForm = Omit<User, 'id'>; // 去掉不可编辑的 id
type UserMap = Record<string, User>; // { [k: string]: User }
// ReturnType / Parameters:从函数反推类型
function fetchUser(): Promise<User> { /* ... */ return null as any; }
type R = ReturnType<typeof fetchUser>; // Promise<User>
type P = Parameters<typeof fetchUser>; // []
// 手写 Omit 看穿工具类型的本质
type MyOmit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;