1. 条件类型, 根据类型的赋值情况,来决定是那个类型
如果T 可以被赋值给 U ,那么就是x , 否则就是y
T extends U ? x : y
1. 映射类型
可以将某个类型接口的类型,进行拷贝,拷贝时,可以做一些转换
type TypeName<T> =
T extends string ? "string" :
T extends number ? "number" :
T extends boolean ? "boolean" :
T extends undefined ? "undefined" :
T extends Function ? "function" :
"boject";
type T1 = TypeName<string>;//type T1 = "string"
type T2 = TypeName<string[]>;//type T2 = "boject"
//三步式条件类型
// ( A | B) extends U ? x : y
// 会自动拆分成
// ( A extends U ? x : y | B extends U ? x : y )
type T3 = TypeName<string | string[]>; //type T3 = "string" | "boject"
1.2 重点
type Diff<T , U> = T extends U ? never : T;
type T4 = Diff< "a" | "b" | "c" , "a" | "e">;//type T4 = "b" | "c"
//推断流程
// Diff<"a" , , "a" | "e"> | Diff<"b" , , "a" | "e"> | Diff<"c" , , "a" | "e">
// never | b | c
// b | c
//升级Diff,过滤undefined和null
type NotNull<T> = Diff<T, undefined | null>;
type T5 = NotNull<string | number | undefined | null>;//type T5 = string | number
//其实ts内置的有现有的方法
//ExcLude<T , U>;类似于Diff
//NonNullable<T>;类似于NotNull
//Extract<T , U>;与Diff相反,取共同的值
type T6 = Extract<"a" | "b" | "c" , "a" | "e">;//type T6 = "a"
//ReturnType<T>
//返回值的类型
type T7 = ReturnType< () => string>;//type T7 = string