前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TypeScript-条件和分布式条件类型

TypeScript-条件和分布式条件类型

原创
作者头像
杨不易呀
发布2023-09-29 20:29:46
1870
发布2023-09-29 20:29:46
举报
文章被收录于专栏:杨不易呀杨不易呀

条件类型(三目运算)

判断前面一个类型是否是后面一个类型或者继承于后面一个类型 如果是就返回第一个结果, 如果不是就返回第二个结果 语法: T extends U ? X : Y;

代码语言:typescript
复制
type MyType<T> = T extends string ? string : any;
type res = MyType<boolean>

分布式条件类型

被检测类型是一个联合类型的时候, 该条件类型就被称之为分布式条件类型

代码语言:typescript
复制
type MyType<T> = T extends any ? T : never;
type res = MyType<string | number | boolean>;

应用场景

T 中剔除可以赋值给 U 的类型

代码语言:typescript
复制
type MyType<T, U> = T extends U ? never : T;
type res = MyType<string | number | boolean, number>

像如上的这种需求比较常用 TS 内部其实已经封装了对于的方法 Exclude

代码语言:typescript
复制
type MyType<T, U> = T extends U ? never : T;
type res = Exclude<string | number | boolean, number>

提取 T 中可以赋值给 U 的类型 Extract

代码语言:typescript
复制
type MyType<T, U> = T extends U ? never : T;
type res = Extract<string | number | boolean, number | string>

从 T 中剔除 null?developer/article/2334403/undefined NonNullable

代码语言:typescript
复制
type MyType<T, U> = T extends U ? never : T;
type res = NonNullable<string | null | boolean | ?developer/article/2334403/undefined>

获取函数返回值类型 ReturnType

代码语言:typescript
复制
type res = ReturnType<(() => number)>

获取一个类的构造函数参数组成的元组类型 ConstructorParameters

代码语言:typescript
复制
class Person {
    constructor(name: string, age: number) {
    }
}

type res = ConstructorParameters<typeof Person>;

获得函数的参数类型组成的元组类型 Parameters

代码语言:typescript
复制
function say(name: string, age: number, gender: boolean) {
}

type res = Parameters<typeof say>;
输入图片说明
输入图片说明

最后

本期结束咱们下次再见?~

? 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ ?

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

输入图片说明
输入图片说明

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 条件类型(三目运算)
  • 分布式条件类型
    • 应用场景
    • 最后
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com