首页 > web前端 > js教程 > TypeScript 中的并集和交集类型

TypeScript 中的并集和交集类型

DDD
发布: 2025-01-06 08:07:44
原创
831 人浏览过

TypeScript 中的并集和交集类型

介绍

TypeScript 是 JavaScript 的强类型超集,为 JavaScript 开发带来了强大的类型检查功能。这些功能可以帮助开发人员尽早发现错误并编写更易于维护的代码。 TypeScript 的强大功能包括 联合类型交集类型。这些类型在定义复杂类型时提供了灵活性和精确性,这对于大规模应用程序至关重要。

本文的目标是解释 TypeScript 中并集和交集类型的概念。我们将深入研究一个示例来说明如何组合这些类型来创建更具表现力的类型定义。读完本文后,您应该对如何在 TypeScript 项目中有效使用这些类型有深入的了解。

好吧,事不宜迟,让我们开始吧。

案例研究

我下面有这个表情包。

Union and Intersection Types in TypeScript

https://www.picturepunches.com/meme/317642

谈话艺术中有一条不言而喻的规则:永远不要问女人的年龄永远不要问男人的薪水。但让我们加大赌注,让这件事变得更有趣。想象一下第三条规则:永远不要询问编码员未完成的项目数量。有些秘密最好留在阴影中——因为无论是年龄、收入还是废弃的副业项目,答案往往伴随着你可能还没准备好听的故事。

好的,让我们关注前两项:男人和女人。

Dont ask 1 Dont ask 2 Should ask 1 Should ask 2
Man Salary Relationship Address Full name
Woman Age Weight Address Full name

在 TypeScript 中我们可以创建这样的类型:

type Person = {
    gender: 'man' | 'woman',
    dontAsk: 'salary' | 'relationship' | 'age' | 'weight'
};
登录后复制

如果我们基于 Person 类型创建对象,就会出现问题

const person1: Person = {
    gender: 'man',
    dontAsk: 'weight',
};

const person2: Person = {
    gender: 'woman',
    dontAsk: 'salary',
};
登录后复制

以上两个对象都不会显示任何类型错误。

Intersection 和 Union 类型来解决这个问题。

联合类型

联合类型 允许变量是多种类型之一。在我们的示例中:

{
    gender: 'man',
    dontAsk: 'salary' | 'relationship'
} | {
    gender: 'woman',
    dontAsk: 'weight' | 'size'
}
登录后复制

这部分类型定义指出,Person 可以是以下两种形状之一:

  1. 性别为“男人”且不要问为“薪水”或“关系”的对象。
  2. 性别为“女性”的对象,不要问“体重”或“年龄”。

这种灵活性在处理多种形式的数据时非常有用。

交叉口类型

交叉点类型将多种类型组合为一种。交集类型的变量必须满足所有组成类型。在我们的示例中:

& {
    address?: string,
    fullName: string
}
登录后复制

这部分类型定义规定 Person 必须具有:

  • 字符串类型的可选地址属性。
  • 字符串类型的必需 fullName 属性。

组合并集和交集类型

完整的 Person 类型结合了并集和交集类型:

type Person = ({
    gender: 'man',
    dontAsk: 'salary' | 'relationship'
} | {
    gender: 'woman',
    dontAsk: 'weight' | 'age'
}) & {
    address?: string,
    fullName: string
};
登录后复制

Person 对象必须与联合类型之一匹配,并且还必须包含交集类型中定义的属性。以下是一些有效的 Person 对象:

const person1: Person = {
    gender: 'man',
    dontAsk: 'salary',
    fullName: 'John Doe'
};

const person2: Person = {
    gender: 'woman',
    dontAsk: 'weight',
    fullName: 'Jane Doe',
    address: '123 Main St'
};
登录后复制

如果定义 person1 不要求年龄,则会显示错误。在内置了 TypeScript 支持的 Visual Studio Code 中,当我们将鼠标悬停在对象上时,它会显示错误。

Union and Intersection Types in TypeScript

概括

在 TypeScript 中,联合类型允许变量是多种类型之一,而交集类型将多种类型组合为一种。通过理解和使用这些类型,您可以编写更灵活、更健壮的 TypeScript 代码。 Person 类型示例说明了如何组合这些概念来创建复杂且精确的类型定义。

有效使用 TypeScript 可以显着提高代码的可维护性。当新开发人员加入您的团队时,清晰的类型定义可以减少冗长解释的需要。团队可以专注于讨论项目的流程和目标,从而提高生产力和协作,而不是破译代码。

以上是TypeScript 中的并集和交集类型的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板