TypeScript高级类型之条件类型

什么是条件类型

含义:是一种由条件表达式所决定的类型;

基本语法:T extends U ? X : Y  代表的含义为:如果类型T可以被赋值给类型U ,那么就是X类型,否则就是Y类型;

作用:条件类型使类型具有了不唯一性,增加了语言的灵活性。

下面我们来看一个最基本的例子:

type TypeName=
    T extends string ? "string":
    T extends number ? "number":
    T extends boolean ? "boolean":
    T extends undefined ? "undefined":
    T extends Function ? "function":
    "object";
type T1=TypeName
type T2=TypeName

上述的例子我们可以看到T1最终为string类型,T2最终为object类型。

分布式条件类型:(T是联合类型的情况下)

(A|B) extends U ? X : Y  

结果会变成多个条件类型的联合类型,可以拆解为(A extends U ? X : Y) | (B extends U ? X : Y)

通过这个特性可以帮助我们实现一些类型的过滤:

type Dirt=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=Dirt
type T5=NotNull  //可以为我们过滤掉undefined和null

上述我们想要实现的效果,其实TS都为我们内置了

  • Exclude  可以从类型T中过滤掉可以赋值给类型U的类型

  • NotNullable

  • Extract  可以从类型T中抽取可以赋值给类型U的类型

  • RetrenType 可以获取一个函数返回值的类型

这里只是简单罗列几个T内置的条件类型,其实还有很多,小伙伴们请自行查阅。

 

 

你可能感兴趣的:(TypeScript)