首页 > 其他分享 >13. TypeScript中的联合类型和交叉类型

13. TypeScript中的联合类型和交叉类型

时间:2024-04-09 13:31:10浏览次数:27  
标签:13 TypeScript string number value Second 类型 First

在TypeScript中,类型系统提供了多种方式来组合类型,其中最常见的就是联合类型和交叉类型。这两种类型都允许你以灵活的方式处理可能有多种类型的值。

一、联合类型

1.1 定义

在TypeScript中,联合类型是一种复合类型,表示一个值可以是几种类型之一。我们使用|符号来定义联合类型。

// 定义一个联合类型,表示value可以是number类型或者string类型
let value: number | string;

value = 1; // 这是合法的,因为1是number类型
value = 'hello'; // 这也是合法的,因为'hello'是string类型
value = true; // 这是非法的,因为true不是number类型也不是string类型

在这个例子中,value可以是number类型或者string类型,但不能是其他类型。

1.2 应用场景

联合类型在处理可能有多种类型的值时非常有用。例如,一个函数的参数可能是number类型或者string类型,我们就可以使用联合类型来定义这个参数的类型。

function print(value: number | string) {
  console.log(value);
}

在这个例子中,print函数的参数value可以是number类型或者string类型。

二、交叉类型

2.1 定义

交叉类型是另一种复合类型,表示一个值同时具有多种类型。我们使用&符号来定义交叉类型。

// 定义两个类型
type First = { a: number };
type Second = { b: string };

// 使用&符号定义一个交叉类型,表示一个值同时具有First类型和Second类型的所有属性
type Both = First & Second;

在这个例子中,Both类型同时具有First类型和Second类型的所有属性。

2.2 应用场景

交叉类型在需要一个值同时具有多种类型的属性时非常有用。例如,我们可以使用交叉类型来定义一个对象,这个对象同时具有两个接口的所有属性。

interface First {
  a: number;
}

interface Second {
  b: string;
}

// 使用&符号定义一个交叉类型,表示一个对象同时具有First接口和Second接口的所有属性
type Both = First & Second;

let value: Both = { a: 1, b: 'hello' }; // 这是合法的,因为value同时具有First接口和Second接口的所有属性

在这个例子中,value对象同时具有First接口和Second接口的所有属性。

三、总结

联合类型和交叉类型是TypeScript强大类型系统的重要组成部分,它们提供了灵活的方式来处理可能有多种类型的值。更好的实践是使用自定义类型type对其进行定义,以便更加方便的使用。

标签:13,TypeScript,string,number,value,Second,类型,First
From: https://blog.csdn.net/imdeity/article/details/137540649

相关文章

  • 14. TypeScript类型保护(类型缩小、类型守卫)
    类型保护是一种TypeScript技术,用于获取变量类型信息,通常使用在条件块语句中。类型守卫是返回布尔值的常规函数,接受一个类型并告诉TypeScript是否可以缩小到更具体的类型。TypeScript类型保护的方式类型断言类型断言是一种告诉编译器“相信我,我知道我在做什么”的方式。......
  • 洛谷题单指南-数学基础问题-P3913 车的攻击
    原题链接:https://www.luogu.com.cn/problem/P3913题意解读:车所在的行、列一共有多个个格子。解题思路:假设3*3的棋盘,有三个车分析得知,三个车覆盖了第1、2两行,第2、3两列,覆盖的格子数用公式计算就是2*3+2*3-2*2=8也就是两行格子数加两列格子数再减去交叉点。因此......
  • 冒泡排序的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程概念本质:相邻元素两两比较并交换位置,使整个序列按照特定的顺序排列特性复杂度分析时间复杂度:最好情况:O(n)最坏情况:O(n^2)平均情况:O(n^2)空间复杂度:O(1),原地排序使用场景因为时间复杂度为O(n^2)适......
  • 优先队列的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程特性效率比普通队列高每个出队元素拥有最高优先级可以用数组、链表等数据结构实现,但是堆结构是最常用的实现方式设计实现方式:基于堆结构实现,堆结构底层基于数组实现属性:heap:存放队列元素方法:enq......
  • 插入排序的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程概念本质:将数列分为已排序和未排序,将未排序中的元素插入到已排序中的合适位置特性复杂度分析时间复杂度:最好情况:O(n),有序序列最坏情况:O(n^2),倒序序列平均情况:O(n^2),随机数列空间复杂度:O(n),原地排序使......
  • 选择排序的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程概念本质:两两元素相比较,先扫描一遍未排序数列,把未排序的数列中的最小(大)元素,放到数列的已排序的末尾特性选择排序是冒泡排序的优化版本,主要优化了交换的过程在所有完全依靠交换去移动元素的排序方法中,选择排......
  • TensorFlow2数据类型
    1.1数值类型数值类型的张量是TensorFlow的主要数据载体,分为:1.标量(Scalar)单个的实数,如1.2,3.4等,维度数(Dimension,也叫秩)为0,shape为[]2.向量(Vector)n个实数的有序集合,通过中括号包裹,如[1.2],[1.2,3.4]等,维度数为1,长度不定,shape为[......
  • 瀚高数据库获取数据表结构(字段名,字段类型,字段长度,是否为空,描述 )SQL语句
    瀚高数据库获取数据表结构(字段名,字段类型,字段长度,是否为空,描述)SQL语句SELECTc.column_nameas"字段",c.data_typeas"字段类型",c.character_maximum_lengthas"字段长度",c.is_nullableas"是否为NULL",t.descriptionas"注释"F......
  • C#开发的绑定类型默认应用例子 - 开源研究系列文章
          这次在用C#编写一个看图软件小工具,然后其它的基本完成了,就是绑定看图软件到那些个图片扩展名的时候碰到了问题,就是如何将看图软件绑定图片文件的默认应用,以及解绑默认应用。这个涉及到注册表操作,但是找度娘和AI回答,都没得到良好的回复。于是就根据AI的提示,自己研究了......
  • 【游戏分析】RPG类型游戏数据关联名称库加密算法
    我们找到的无论是周围数组还是数组套链表结构里都没有发现NPC名称那么我们在不能直接观察得到的时候只有单独去找名称属性了 找一个NPC搜索其名称得到10几个那么我们尝试修改看看是哪一个  发现是14这个地址到DO中去看一下   发现周围全是其他的各......