内容更新于: 2024-03-02 05:07:36
ts-类型工具
前言:记述typescript一些常用的类型工具。例如:Omit、Pick、Extract等
Awaited
Awaited<Type>用来取出 Promise 的返回值类型,适合用在描述then()方法和 await 命令的参数类型。
type Awaited<T> =
T extends null | undefined ? T :
T extends object & {
then(
onfulfilled: infer F,
...args: infer _
): any;
} ? F extends (
value: infer V,
...args: infer _
) => any ? Awaited<...> : never:
T;
Exclude
Exclude<UnionType, ExcludedMembers>用来从联合类型UnionType里面,删除某些类型ExcludedMembers,组成一个新的类型返回。
type Exclude<T, U> = T extends U ? never : T;
Extract
type Extract<T, U> = T extends U ? T : never;
Omit
Omit<Type, Keys>用来从对象类型Type中,删除指定的属性Keys,组成一个新的对象类型返回。
interface A {
x: number;
y: number;
type T1 = Omit<A, 'x'>; // { y: number }
type T2 = Omit<A, 'y'>; // { x: number }
type T3 = Omit<A, 'x' | 'y'>; // { }
实现如下:
type Omit<T, K extends keyof any>
= Pick<T,
Pick
Pick<Type, Keys>返回一个新的对象类型,第一个参数Type是一个对象类型,第二个参数Keys是Type里面被选定的键名。
interface A {
x: number;
y: number;
}
type T1 = Pick<A, 'x'>; // { x: number }
type T2 = Pick<A, 'y'>; // { y: number }
type T3 = Pick<A, 'x'|'y'>; // { x: number; y: number }
实现如下
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
本文结束
