将类型 T 的所有属性变为可选。
tsinterface User {
id: number;
name: string;
age: number;
}
type PartialUser = Partial<User>;
// 等价于 { id?: number; name?: string; age?: number }
适用场景:如更新用户信息时,允许部分字段可选。
将类型 T 的所有属性变为必填。
tsinterface Config {
url?: string;
cache?: boolean;
}
type StrictConfig = Required<Config>;
// { url: string; cache: boolean }
适用场景:要求配置对象必须提供所有属性。
将类型 T 的所有属性设为只读。
tsinterface Point {
x: number;
y: number;
}
type ReadonlyPoint = Readonly<Point>;
// { readonly x: number; readonly y: number }
适用场景:如 React 组件的 props 应不可变。
从 T 中选取指定属性 K。
tsinterface User {
id: number;
name: string;
age: number;
}
type UserPreview = Pick<User, 'id' | 'name'>;
// { id: number; name: string }
适用场景:列表页仅展示部分字段。
从 T 中移除指定属性 K。
tsinterface User {
id: number;
name: string;
password: string;
}
type SafeUser = Omit<User, 'password'>;
// { id: number; name: string }
适用场景:返回用户信息时隐藏敏感字段。
构建一个键类型为 K、值类型为 T 的对象。
tstype Role = 'admin' | 'user';
type RoleMap = Record<Role, number>;
// { admin: number; user: number }
适用场景:构建枚举到权限的映射结构。
从 T 中排除 U 中的类型。
tstype T = Exclude<'a' | 'b' | 'c', 'a'>;
// 'b' | 'c'
适用场景:过滤联合类型中的某些项。
提取 T 和 U 中共有的类型。
tstype T = Extract<'a' | 'b' | 'c', 'a' | 'f'>;
// 'a'
适用场景:提取允许使用的类型子集。
排除 T 中的 null 和 undefined。
tstype T = NonNullable<string | null | undefined>;
// string
适用场景:严格模式下确保类型不为空。
提取函数 T 的返回值类型。
tsfunction fetchUser() {
return { id: 1, name: 'Alice' };
}
type User = ReturnType<typeof fetchUser>;
// { id: number; name: string }
适用场景:提取接口返回值类型,避免重复声明。
提取函数 T 的参数类型元组。
tsfunction greet(name: string, age: number) {}
type Params = Parameters<typeof greet>;
// [string, number]
适用场景:复用已有函数的参数类型。
提取构造函数 T 的参数类型。
tsclass Person {
constructor(name: string, age: number) {}
}
type Params = ConstructorParameters<typeof Person>;
// [string, number]
适用场景:工厂函数中自动推断构造参数。
提取构造函数 T 的实例类型。
tsclass Person {
name: string;
constructor(name: string) { this.name = name; }
}
type P = InstanceType<typeof Person>;
// Person
适用场景:基于类类型生成其实例类型。
提取函数 T 的 this 类型。
tsfunction say(this: { name: string }) { return this.name; }
type T = ThisParameterType<typeof say>;
// { name: string }
适用场景:约束函数中的上下文类型。
移除函数 T 的 this 参数类型。
tsfunction say(this: { name: string }) { return this.name; }
type Fn = OmitThisParameter<typeof say>;
// () => string
适用场景:将绑定 this 的函数转为无 this 的普通函数。
tsasync function getUser() {
return { id: 1, name: 'Tom', token: 'secret' };
}
type User = Omit<ReturnType<typeof getUser>, 'token'>;
// { id: number; name: string }
tsinterface UserForm {
name: string;
age: number;
email: string;
}
function updateUser(id: number, data: Partial<UserForm>) {}
tstype Routes = 'home' | 'about' | 'login';
type RouteConfig = Record<Routes, string>;
// { home: string; about: string; login: string }
tsinterface ButtonProps {
label: string;
onClick: () => void;
disabled?: boolean;
}
type RequiredButton = Required<ButtonProps>;
// 所有属性变为必填
本文作者:小白菜
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!