Partial T : 将接口的所有元素都变成可选
interface Order {
id: string;
createTime: number;
}
type MyPartial<T> = { [P in keyof T]?: T[P] }
type TypeOrder1 = Partial<Order>;
type TypeOrder2 = MyPartial<Order>;
Require T : 将接口的所有元素都变成必填
type Order2 = {
id: string,
createTime?: number;
}
type MyRequired<T> = {[K in keyof T]-?: T[K]}
type Type1 = Required<Order2>
type Type2 = MyRequired<Order2>
Readonly T: 将接口所有元素变成readonly
interface Order {
id: string;
createTime: number;
}
type MyReadonly<T> = { readonly [P in keyof T ]: T[P]};
type TypeOrder1 = Readonly<Order>;
type TypeOrder2 = MyReadonly<Order>;
Record T,U :将接口所有元素类型定为U
interface Order {
id: string;
createTime: number;
}
type OrderType = "pending" | "finished" | "created";
type MyRecord<T extends string | number | symbol, U> = { [ P in T]: U}
type TypeOrder1 = Record<OrderType, Order>;
type TypeOrder2 = MyRecord<OrderType, Order>;
Exclude T,U: 在类型T中剔除满足类型U的类型
type MyExclude<T,U> = T extends U ? never : T;
type Type1 = Exclude<'a' | 'b' | 'c', 'c'>;
type Type2 = TypeExclude<'a' | 'b' | 'c', 'c'>;
Extract T,U : 从类型T选择满足类型U
type MyExtract<T, U> = T extends U ? T : never;
type Type1 = Extract<'a'|'b'|'c', 'c'>
type Type2 = MyExtract<'a'|'b'|'c', 'c'>
Pick T,U :从接口中选取目标(U)类型
Pick<T, U>
interface Order {
id: string;
createTime: number;
}
type MyPick<T, U extends number | string | symbol> = { [K in U]: T[K]};
type TypeCreateTime1 = Pick<Order, 'createTime'>;
type TypeCreateTime2 = MyPick<Order, 'createTime'>;
Omit T,U: 与Pick相反,从T中剔除掉key满足U的元素
interface Order {
id: string;
createTime: number;
}
type MyOmit<T, U extends number | string | symbol> = { [K in Exclude<keyof T, U>]: T[K]}
type Type1 = Omit<Order, 'createTime'>
type Type2 = MyOmit<Order, 'createTime'>
Parameters T: 获取函数传参类型
type Fn = (param: string, config: {}) => string;
type MyParamters<T extends (...args: any) => any> = T extends (...args: infer U) => any ? U : never;
type Type3 = Parameters<Fn>;
type Type4 = MyParamters<Fn>;
ReturnType T: 获取函数返回类型
type Fn = (param: string) => string;
type MyReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer U ? U : never;
type Type3 = ReturnType<Fn>;
type Type4 = MyReturnType<Fn>;
NonNullable
InstanceType