/*
Exclude<T,K>
Exclude:T类型中过滤掉包含K类型
*/
type A = Exclude<'a' | 'b' | 'c','a' | 'e'>; // A:'b' | 'c'
/*
NonNullable<T>
NonNullable:过滤掉T类型中的undefined、null、never类型
*/
type B = NonNullable<string | number | undefined | null | boolean | never | object>;//B:
/*
Extract<T,K>
Extract:只取T类型中包含K类型的类型项
*/
type C = Extract<'a' | 'b' | 'c','a' | 'e'>;//C:'a'
type OBJ = {
a:number,
b:string,
c:boolean
}
/*
Readonly<T>
Readonly:将泛型T的所有key设置成只读
*/
type D = Readonly<OBJ>;//D: {readonly a:number...}
/*
Partial<T>;
Partial:将泛型T的所有key设置成只读
*/
type E = Partial<OBJ>;//E: {a?:number...}
/*
Pick<T,K>
Pick:从泛型T中返回K类型
*/
type F = Pick<OBJ,'a' | 'b'>;//F: {a:number;b:string}
/*
ReturnType<T>
ReturnType:返回泛型T的类型,注意T必须是一个函数
*/
type G = ReturnType<() => string>;//G: string
/*
infer:只能跟extends结合使用,推断类型,参考ReturnType的实现原理
*/
type ReturnTypeCopy<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;