TypeScript高级类型之条件类型

本文深入探讨了条件类型的概念,包括其基本语法、作用及如何利用条件类型实现类型过滤和抽取。通过实例展示了如何使用条件类型来增加语言的灵活性,并介绍了TypeScript内置的一些条件类型如Exclude和NotNullable。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是条件类型

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

基本语法: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内置的条件类型,其实还有很多,小伙伴们请自行查阅。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值