返回

条件类型:TypeScript 中逻辑条件化类型

前端

TypeScript 中的条件类型

条件类型允许我们根据逻辑条件来定义类型。它们通过使用类似于 JavaScript 中三元运算符的语法来实现。

让我们来看一个简单的例子:

type IsBoolean<T> = T extends boolean ? true : false;

这个条件类型接受一个类型参数 T,并根据 T 是否为 boolean 类型返回 truefalse。如果 Tboolean,它将返回 true,否则返回 false

使用条件类型

条件类型可以应用于各种场景,包括:

  • 约束泛型类型: 条件类型可用于约束泛型类型的参数。例如,我们可以定义一个泛型函数,它仅接受布尔值参数:
function isTrue<T extends boolean>(value: T): boolean {
  return value;
}
  • 类型推断: 条件类型可用于根据条件推断变量或表达式的类型。例如,我们可以使用前面的 IsBoolean 类型来推断变量 isBool 的类型:
let isBool: IsBoolean<true> = true; // isBool 的类型为 true
  • 类型保护: 条件类型可用于保护类型,确保只有满足特定条件的值才能分配给该类型。例如,我们可以使用 IsBoolean 类型来确保变量 value 为布尔值:
if (IsBoolean<typeof value>) {
  // 在这里,我们知道 value 一定是 boolean 类型
}

高级用法

条件类型还可以与其他 TypeScript 特性结合使用,例如:

  • 交叉类型: 条件类型可与交叉类型结合使用以创建更复杂的类型。例如,我们可以定义一个类型,它表示一个具有 nameage 属性的对象:
type Person = { name: string } & { age: number };
  • 映射类型: 条件类型可与映射类型结合使用以创建新的类型,其中每个属性的值基于条件。例如,我们可以定义一个类型,它将字符串键映射到布尔值:
type BooleanMap<T extends string> = {
  [key in T]: boolean;
};

结论

条件类型是 TypeScript 中一个强大的工具,它可以根据逻辑条件定义类型。它们提供了增强代码灵活性和健壮性的方法,并允许我们创建更复杂和可重用的类型系统。通过理解并有效利用条件类型,我们可以构建更高级的 TypeScript 应用程序。