乐闻世界logo
搜索文章和话题

What are Conditional Types in TypeScript ?

2 个月前提问
2 个月前修改
浏览次数9

1个答案

1

什么是TypeScript中的条件类型?

在TypeScript中,条件类型是一种强大的工具,它允许类型根据某个条件来决定。它们的语法类似于JavaScript中的三元操作符(条件 ? 真类型 : 假类型)。条件类型在泛型编程中特别有用,它提供了一种灵活的方法来选择两种可能的类型之一,具体取决于类型间的关系。

语法

条件类型的基本语法如下:

typescript
T extends U ? X : Y

这里,类型T被检查是否可以赋值给类型U(即T是否兼容U)。如果可以,结果类型是X;否则,结果类型是Y

示例

假设我们想定义一个类型,这个类型根据输入的类型是数组还是非数组,返回不同的类型。如果是数组类型,我们返回数组的元素类型;如果不是数组,我们直接返回原类型。

typescript
type ElementType<T> = T extends Array<infer U> ? U : T; // 使用示例 type numArray = ElementType<number[]>; // 类型是 number type str = ElementType<string>; // 类型是 string

在上面的例子中,ElementType<T> 是一个条件类型,它检查 T 是否可以赋值给 Array<infer U>。如果 T 是一个数组类型,例如 number[],则 U 将被推断为数组的元素类型(在这个例子中是 number),然后条件类型返回 U。如果 T 不是一个数组,那么就直接返回 T

用途

条件类型非常适合在类型系统中根据条件推导类型,这在处理不同类型的数据时非常有用。它们常用于库的类型定义中,以提供更精确的类型支持和类型安全。

例如,我们可以使用条件类型来实现一个类型安全的获取对象属性的函数,该函数能够根据输入的键和对象返回相应的属性类型:

typescript
type PropertyType<T, K extends keyof T> = K extends keyof T ? T[K] : never; function getProperty<T, K extends keyof T>(obj: T, key: K): PropertyType<T, K> { return obj[key]; } const obj = { name: "Alice", age: 25 }; const name: string = getProperty(obj, 'name'); // 正确, 返回类型为 string const age: number = getProperty(obj, 'age'); // 正确, 返回类型为 number

在这个例子中,PropertyType<T, K> 是一个条件类型,它检查 K 是否确实是 T 的一个键,如果是,则返回与该键相关联的值的类型。

条件类型是TypeScript类型系统的一个非常强大和灵活的特性,它大大增强了TypeScript的表达能力和类型安全。

2024年7月29日 13:45 回复

你的答案