Skip to content

extends 条件类型怎么定义?

Posted on:2024年9月5日 at 01:18

在 TypeScript 中,条件类型(Conditional Types)是一种根据类型条件选择不同类型的机制。extends 关键字在条件类型中用于表示一个类型是否满足特定条件。条件类型的基本语法如下:

T extends U ? X : Y

定义条件类型

示例 1:基本的条件类型

type TrueType = true extends true ? "Yes" : "No"; // 'Yes'
type FalseType = false extends true ? "Yes" : "No"; // 'No'

在这个例子中:

示例 2:基于泛型的条件类型

type IsString<T> = T extends string ? "Yes" : "No";

type Result1 = IsString<string>; // 'Yes'
type Result2 = IsString<number>; // 'No'

在这个例子中,IsString 是一个泛型条件类型:

示例 3:复杂的条件类型

可以结合多个条件进行复杂的判断。

type IsStringOrNumber<T> = T extends string | number
  ? "String or Number"
  : "Other";

type Test1 = IsStringOrNumber<string>; // 'String or Number'
type Test2 = IsStringOrNumber<number>; // 'String or Number'
type Test3 = IsStringOrNumber<boolean>; // 'Other'

在这个例子中:

示例 4:条件类型与联合类型

type ElementType<T> = T extends (infer U)[] ? U : T;

type NumberArray = ElementType<number[]>; // number
type StringType = ElementType<string>; // string

在这个例子中:

条件类型的高级用法

条件类型的分布式条件类型

type Distribute<T> = T extends any ? T : never;

type Result = Distribute<"a" | "b">; // 'a' | 'b'

在这个例子中,Distribute 将条件类型 T extends any ? T : never 应用于 'a' | 'b',结果是 'a' | 'b'

递归条件类型

type Flatten<T> = T extends (infer U)[]
  ? U extends any[]
    ? Flatten<U>
    : U
  : T;

type Result1 = Flatten<number[]>; // number
type Result2 = Flatten<number[][][]>; // number
原文转自:https://fe.ecool.fun/topic/c39fb3f7-c3c7-4b17-aea5-655fb363bfd9