关于 TypeScript 中的联合类型

举报
汪子熙 发表于 2023/07/28 10:04:21 2023/07/28
【摘要】 在 TypeScript 中,| 符号被用于定义联合类型(Union Types)。联合类型是一种高级的类型定义方式,它允许你定义一个类型为多种类型中的一种。这对于处理可能有多种类型的变量非常有用。例如,假设我们有一个函数,它接受一个参数,这个参数可能是一个数字,也可能是一个字符串。在 JavaScript 中,我们无法明确指定这个参数的类型,但在 TypeScript 中,我们可以使用联合...

在 TypeScript 中,| 符号被用于定义联合类型(Union Types)。联合类型是一种高级的类型定义方式,它允许你定义一个类型为多种类型中的一种。这对于处理可能有多种类型的变量非常有用。

例如,假设我们有一个函数,它接受一个参数,这个参数可能是一个数字,也可能是一个字符串。在 JavaScript 中,我们无法明确指定这个参数的类型,但在 TypeScript 中,我们可以使用联合类型来做这个事情:

function logInput(input: string | number) {
  console.log(input);
}

在上述代码中,input 参数的类型被定义为 string | number,这意味着它可以是一个字符串或者是一个数字。

联合类型特别有用,因为 TypeScript 会根据联合类型中的所有可能类型来检查我们的代码。例如,考虑以下代码:

function getLength(input: string | number) {
  return input.length;
}

这段代码会导致一个错误,因为 number 类型没有 length 属性。TypeScript 的类型检查器知道 input 可能是一个数字,所以它不允许我们尝试访问 length 属性。

为了处理这种情况,我们可以使用类型断言或者类型保护:

function getLength(input: string | number) {
  if (typeof input === 'string') {
    return input.length;
  } else {
    return input.toString().length;
  }
}

在这个例子中,我们首先检查 input 是否是一个字符串。如果是,我们知道它有 length 属性,所以我们可以安全地访问它。如果 input 不是一个字符串,那么我们知道它必须是一个数字,因此我们可以把它转换为一个字符串,然后获取其长度。

联合类型也可以与其他 TypeScript 特性一起使用,例如类型别名和接口。例如,我们可以定义一个类型别名,它是两个接口类型的联合:

interface Cat {
  type: 'cat';
  breeds: string;
  age: number;
}

interface Dog {
  type: 'dog';
  breeds: string;
  age: number;
}

type Pet = Cat | Dog;

function printPet(pet: Pet) {
  console.log(`Type: ${pet.type}, Breeds: ${pet.breeds}, Age: ${pet.age}`);
}

在这个例子中,Pet 类型是 CatDog 的联合类型。这意味着一个 Pet 可以是一个 Cat 或者一个 Dog

总的来说,TypeScript 中的 | 符号提供了一种强大的方式来处理可能有多种类型的值。通过使用联合类型,我们可以编写更灵活的代码,同时还能保持强大的类型安全性。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。