TS中的条件类型

前端精髓

共 1164字,需浏览 3分钟

 ·

2021-04-08 20:40


本篇介绍TS另一种高级类型-条件类型。

官方文档:https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types

1、条件类型是一种由条件表达式所决定的类型

2、条件类型使类型具有了不唯一性,同样增加了语言的灵活性


例如:

T extends U ? X : Y

若类型T可被赋值给类型U,那么结果类型就是X类型,否则就是Y类型。

条件类型约束


泛型约束的例子:

type MessageOf<T extends { message: unknown }> = T["message"];

在此示例中,我们使用 message: unknown 约束泛型T。


如果我们想 MessageOf 支持任何类型,我们可以通过将约束和条件类型一起使用:

type MessageOf<T> = T extends { message: unknown } ? T["message"] : never;

如果条件成立,在 true 分支内,TypeScript 知道 T 将具有一个 message 属性。否则将会返回 never 类型。

分布条件类型


当条件类型给定联合类型时,它们将变为分布式。

type ToArray<Type> = Type extends any ? Type[] : never;


如果我们将联合类型传入ToArray,则条件类型将应用于该联合的每个成员。

type ToArray<Type> = Type extends any ? Type[] : never;
type StrArrOrNumArr = ToArray<string | number>;

StrArrOrNumArr 类型是 string[] | number[]


避免这种分配性的行为。可以用方括号将 extends 关键字的每一侧括起来。

type ToArrayNonDist<Type> = [Type] extends [any] ? Type[] : never;
type StrOrNumArr = ToArrayNonDist<string | number>;

StrArrOrNumArr 类型是 (string | number)[]

浏览 29
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报