什么是条件类型
含义:是一种由条件表达式所决定的类型;
基本语法:T extends U ? X : Y 代表的含义为:如果类型T可以被赋值给类型U ,那么就是X类型,否则就是Y类型;
作用:条件类型使类型具有了不唯一性,增加了语言的灵活性。
下面我们来看一个最基本的例子:
type TypeName<T>=
T extends string ? "string":
T extends number ? "number":
T extends boolean ? "boolean":
T extends undefined ? "undefined":
T extends Function ? "function":
"object";
type T1=TypeName<string>
type T2=TypeName<string[]>
上述的例子我们可以看到T1最终为string类型,T2最终为object类型。
分布式条件类型:(T是联合类型的情况下)
(A|B) extends U ? X : Y
结果会变成多个条件类型的联合类型,可以拆解为(A extends U ? X : Y) | (B extends U ? X : Y)
通过这个特性可以帮助我们实现一些类型的过滤:
type Dirt<T,U>=T extends U ? never :T; //可以从类型T中过滤掉可以赋值给类型U的类型(可以从类型中除去一些不需要的类型,比如undifined和null等)
type T4=Dirt<'a'|'b'|'c','a'|'e'> //'b' | 'c'
//Diff<'a','a'|'e'> | Diff<'b','a'|'e'> | Diff<'c','a'|'e'>
// never | 'b' | 'c'
// 'b' | 'c'
type NotNull<T>=Dirt<T,undefined|null>
type T5=NotNull<string | number | null |undefined> //可以为我们过滤掉undefined和null
上述我们想要实现的效果,其实TS都为我们内置了
-
Exclude<T,U> 可以从类型T中过滤掉可以赋值给类型U的类型
-
NotNullable
-
Extract<T,U> 可以从类型T中抽取可以赋值给类型U的类型
-
RetrenType<T> 可以获取一个函数返回值的类型
这里只是简单罗列几个T内置的条件类型,其实还有很多,小伙伴们请自行查阅。