返回

深入浅出,掌握 TypeScript 基础:交叉类型和联合类型

见解分享

TypeScript 中的类型:一个集合论的视角

在 TypeScript 中,类型可以理解为一组具有特定特征的值的集合。例如,一个只包含数字的集合可以表示为数字类型 number。以此类推,一个只包含字符串的集合可以表示为字符串类型 string。

交叉类型:集合论中的交集

交叉类型表示两个或多个类型的交集。换句话说,交叉类型只包含同时属于这两个或多个类型的元素。在集合论中,交叉集由符号“∩”表示。

在 TypeScript 中,交叉类型使用符号“&”表示。例如,以下交叉类型定义了一个同时具有数字和布尔值特征的新类型:

type NumericBoolean = number & boolean;

联合类型:集合论中的并集

联合类型表示两个或多个类型的并集。换句话说,联合类型包含属于任何一个类型的元素。在集合论中,并集由符号“∪”表示。

在 TypeScript 中,联合类型使用符号“|”表示。例如,以下联合类型定义了一个可以是数字或字符串的新类型:

type NumericOrString = number | string;

示例:交叉类型和联合类型在实践中

交叉类型和联合类型在 TypeScript 开发中非常有用。例如,我们可以使用交叉类型来定义一个具有特定属性的函数,这些属性来自两个不同的类型。

interface HasName {
  name: string;
}

interface HasAge {
  age: number;
}

function printInfo(person: HasName & HasAge) {
  console.log(`Name: ${person.name}, Age: ${person.age}`);
}

在这里,函数 printInfo 接受一个同时具有 nameage 属性的对象。

联合类型也可以用来定义接受多种类型参数的函数。例如,我们可以使用联合类型来定义一个函数,该函数可以接受数字或字符串。

function addOrConcat(a: number | string, b: number | string) {
  if (typeof a === "number" && typeof b === "number") {
    return a + b;
  } else {
    return a.toString() + b.toString();
  }
}

在这里,函数 addOrConcat 可以接受两个数字或两个字符串,并相应地执行加法或连接操作。

结论

交叉类型和联合类型是 TypeScript 中强大的类型概念,使开发人员能够定义和使用具有复杂特征的类型。通过理解这些类型的集合论基础,我们可以构建更健壮、更灵活的 TypeScript 代码。