TypeScript 从入门到进阶之基础篇(六) 类型(断言 、推论、别名)| 联合类型 | 交叉类型
系列文章目录
TypeScript 从入门到进阶系列
- TypeScript 从入门到进阶之基础篇(一) ts基础类型篇
- TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇
- TypeScript 从入门到进阶之基础篇(三) 元组类型篇
- TypeScript 从入门到进阶之基础篇(四) symbol类型篇
- TypeScript 从入门到进阶之基础篇(五) 枚举类型篇
持续更新中…
文章目录
- 系列文章目录
- TypeScript 从入门到进阶系列
- 前言
- 一、联合类型
- 二、交叉类型
- 类型(断言 、推论、别名) 面试常问
- 1、类型断言(重点)
- 1.1、 尖括号语法:
- 1.2、 as语法:
- 2、类型推论
- 3、类型别名
前言
在一到五章,我们学习了在TypeScript 中 定义和使用各种类型 ,本章我们来学习TypeScript 在 类型(断言 、推论、别名)| 联合类型 | 交叉类型
请注意 本章内容 可能会出现在你面试时的面试题 是面试题常问的内容
一、联合类型
在 TypeScript 中,联合类型是指可以同时具有多个类型的类型。它使用 | 符号来表示多个类型之间的联合关系。
联合类型的变量可以接受其中任意一个类型的值。
例如,可以定义一个变量,它可以接受 string 或 number 类型的值:
let myVariable: string | number;
这样,myVariable 变量可以被赋值为一个字符串或一个数字,如下所示:
myVariable = "Hello World";
myVariable = 123;
联合类型在函数参数、返回值以及变量声明等场景中非常有用。它可以增加代码的灵活性,使得代码更加健壮和可维护。
二、交叉类型
在TypeScript中,交叉类型(Intersection
Types)是一种组合多个类型的方式。交叉类型可以将多个类型合并成一个类型,从而具备合并类型的所有特性。
交叉类型使用&
符号表示,例如type A = B & C;
,表示类型A
是同时具备类型B
和类型C
的属性和方法。
交叉类型的作用是将多个类型的特性合并在一起,使得一个对象具备多个类型的属性和方法。举个例子,假设有一个接口A
表示可触发事件的对象,以及一个接口B
表示可拖拽的对象,可以通过交叉类型将两个接口合并成一个新的接口C
,表示既可以触发事件又可拖拽的对象。
interface A {on(event: string, callback: () => void): void;
}interface B {drag(): void;
}type C = A & B;const obj: C = {on(event, callback) {// 触发事件的逻辑},drag() {// 拖拽的逻辑}
};
通过上述例子可以看出,交叉类型可以让对象具备多个类型的特性,并且可以通过类型注解来保证对象满足合并类型的要求。
类型(断言 、推论、别名) 面试常问
1、类型断言(重点)
在 TypeScript 中,类型断言(Type Assertion)是一种告诉编译器某个值的类型的方式。类型断言可以在编译时确定某个值的类型,方便进行类型检查和类型推断。
有两种形式的类型断言:
1.1、 尖括号语法:
let str: any = "hello";
let length: number = (<string>str).length;
在尖括号内指定要断言的类型,在这个例子中断言 str
是一个字符串类型。编译器会将 str
的类型视为 string
,从而可以调用 length
属性。
1.2、 as语法:
let str: any = "hello";
let length: number = (str as string).length;
使用 as
关键字,将要断言的类型放在 as
的后面。这个例子与上面的例子是等效的。
需要注意的是,类型断言只会在编译时起作用,不会改变原始值的类型。所以在进行类型断言时要确保断言的类型是正确的,否则可能会导致类型错误。
2、类型推论
在TypeScript中,类型推论是指 TypeScript编译器自动根据变量的初始值推断其类型的过程。当你声明一个变量并赋予初始值时,TypeScript编译器会根据这个初始值的类型来推断该变量的类型。
例如,当你声明一个变量并直接赋值一个数字时:
let num = 10;//注意 如果你定义了一个类型 但没有给其赋值
//那么 a 的类型为 any
let a;
TypeScript 编译器会根据初始值 10 推断出 num 的类型为 number。这样,在后续的代码中,你就可以使用 num 作为一个数字类型的变量,并且编译器会对相关的类型进行检查。
又例如,vue3中 ref 的使用 在赋值时会自动推论类型
const bool=ref(true)
const str=ref('类型')
类型推论的好处是可以减少手动类型注解的工作量,并且使代码更简洁。然而,当初始值无法明确推断出类型时,你可能需要手动添加类型注解来指定变量的类型。
3、类型别名
在 TypeScript 中,类型别名(Type Alias)允许我们给一个类型起一个新的名字。通过使用类型别名,我们可以用一个简洁的名称来表示复杂的类型。
类型别名可以用来命名任何类型,包括原始类型(如字符串、数字等),联合类型,交叉类型,对象类型等。比如:
type MyString = string;
type MyNumber = number;
type MyBoolean = boolean;// 联合类型
type MyUnion = string | number;// 交叉类型
type MyIntersection = MyNumber & MyBoolean;// 对象类型
type MyObject = {prop1: string;prop2: number;
};
使用类型别名可以增加代码的可读性和可维护性,特别是在处理复杂的类型时。类型别名的语法是 type
关键字加上一个名称,后面紧跟等号和类型定义。
类型别名还可以用于定义泛型类型,函数类型等。通过使用类型别名,我们可以将复杂的类型定义简化为一个具有描述性的名称,提高代码的可读性和可理解性。
相关文章:

TypeScript 从入门到进阶之基础篇(六) 类型(断言 、推论、别名)| 联合类型 | 交叉类型
系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇TypeScript 从入门到进阶…...
Linux操作系统基础(14):文件管理-文件属性命令
1. 查看文件属性 stat命令用于显示文件的详细信息,包括文件的权限、所有者、大小、修改时间等。 #1.显示文件信息 stat file.txt#2.显示文件系统状态 stat -f file.txt#3.显示以时间戳的形式文件信息 stat -t file.txt2. 修改文件时间戳 touch命令用于创建新的空…...

metaSPAdes,megahit,IDBA-UB:宏基因组装软件安装与使用
metaSPAdes,megahit,IDBA-UB是目前比较主流的宏基因组组装软件 metaSPAdes安装 GitHub - ablab/spades: SPAdes Genome Assembler #3.15.5的预编译版貌似有问题,使用源码安装试试 wget http://cab.spbu.ru/files/release3.15.5/SPAdes-3.15.5.tar.gz tar -xzf SP…...
Apache、MySQL、PHP编译安装LAMP环境
1. 请简要介绍一下LAMP环境。 LAMP环境是一个在Linux操作系统上搭建的服务器环境组合,由Apache、MySQL、PHP三种软件构成。这种环境是开源的,跨平台的,并且由于各组件经常一起使用,因此具有高度的兼容性。 其中,Apac…...

L1-087:机工士姆斯塔迪奥
题目描述 在 MMORPG《最终幻想14》的副本“乐欲之所瓯博讷修道院”里,BOSS 机工士姆斯塔迪奥将会接受玩家的挑战。 你需要处理这个副本其中的一个机制:NM 大小的地图被拆分为了 NM 个 11 的格子,BOSS 会选择若干行或/及若干列释放技能&#x…...

如何做一个炫酷的Github个人简介(3DContribution)
文章目录 前言3D-Contrib第一步第二步第三步第四步第五步第六步 前言 最近放假了,毕设目前也不太想做,先搞一点小玩意玩玩,让自己的github看起来好看点。也顺便学学这个action是怎么个事。 3D-Contrib 先给大家看一下效果 我的个人主页&am…...
基于单片机的护理床控制器设计
一、摘要 随着科技的不断发展,人们对生活质量的要求越来越高,特别是在医疗保健领域。护理床作为医院病房中常见的设备,其功能和性能直接影响到患者的康复进程。本文主要介绍了一种基于单片机的护理床控制器设计,该控制器可以实现…...

《3D数学基础-图形和游戏开发》阅读笔记 | 3D数学基础 (学习中 1.6更新)
文章目录 3D数学基础矢量/向量什么是向量点与矢量的关系 向量基础运算 向量加法向量基础运算 数乘 线性组合 - 坐标系的基如果选择不同的基向量会怎么样?- 张成(Span)的空间三维向量的张成空间线性相关与线性相关 矩阵与线性变换矩阵-几何意义线性变换矩阵乘法与线性…...

解锁测试性能瓶颈:深度探讨JMeter分布式性能测试!
在做后端服务器性能测试中,我们会经常听到分布式。但你是否了解分布式呢?今天,我们就来给大家讲讲,在企业实战中,如何使用分布式进行性能测试,实战过程中,又有哪些地方要特别注意? 0…...

SiC电机控制器(逆变器)发展概况及技术方向
SiC电机控制器(逆变器)发展概况及技术方向 1.概述2.电动汽车动力系统设计趋势3.栅极驱动器和驱动电源配置4.结论 tips:资料来自网上搜集,仅供学习使用。 1.概述 2022年到2023年,第三代半导体碳化硅被推上了新的热潮。…...

useContext
可以跨组件传值 其实主要的就是三步 1、const xxx React.createContext();创建一个context 2、<xxx.Provider value{{ num, setNum }}>父组件设置要传递的值 3、const { num, setNum } React.useContext(xxx);子组件下使用 特点: 1、可以有多个xxx.Pr…...

Java数据结构:1. 数据结构前置知识
文章目录 一、初识数据结构二、初识集合框架1. 什么是集合框架2. 集合框架的重要性3. 背后所涉及的数据结构以及算法 三、时间复杂度空间复杂度1. 算法效率2. 时间复杂度(1)概念(2)大O的渐进表示法(3)推导大…...

Vue中使用Element UI的Table组件实现嵌套表格(最简单示例)
以下是一个简单的示例代码,演示如何在Vue中使用Element UI的Table组件实现嵌套表格: html <template><div><el-table :data"tableData" style"width: 100%"><el-table-column prop"name" label&quo…...
如何使用RESTful API构建 web 应用程序
RESTful API 是一种设计风格,用于构建可扩展、灵活和可维护的 web 应用程序。它是一种基于 HTTP 协议的架构风格,旨在提供一组规范和约束,以便客户端和服务器之间的通信更加简单和可预测。 RESTful API 通过使用 HTTP 动词来定义资源的操作&…...

开启Android学习之旅-4-Android集成FontAwesome
FontAwesome 是一个非常标准、统一风格的图标库。产品经理在原型中应用了很多图标都是FontAwesome。正常流程是 UI 需要再手工绘制或在 iconfont 或 iconpark 网站挨个找,如果在 Android 直接使用不是省了一步(注意版权问题,使用免费版&#…...

Qt——TCP UDP网络编程
目录 前言正文一、TCP二、UDP1、基本流程2、必备知识 三、代码层级1、UDP服务端 END、总结的知识与问题1、如何获取QByteArray中某一字节的数据,并将其转为十进制?2、如何以本年本月本日为基础,获取时间戳,而不以1970为基础&#…...

有什么安全处理方案可以有效防护恶意爬虫
常见的爬虫 有百度爬虫、谷歌爬虫、必应爬虫等搜索引擎类爬虫,此类爬虫经常被企业用于提高站点在搜索引擎内的自然排名,使得站点在各大搜索引擎中的排名能够提高,进一步通过搜索引擎来进行引流为企业增加业务流量。 恶意爬虫与合法、合规的搜…...

Flutter3.X基础入门教程(2024完整版)
Flutter介绍: Flutter是谷歌公司开发的一款开源、免费的UI框架,可以让我们快速的在Android和iOS上构建高质量App。它最大的特点就是跨平台、以及高性能。 目前Flutter已经支持 iOS、Android、Web、Windows、macOS、Linux的跨平台开发。 教程所讲内容支持…...
GEE——土地利用分类种两个矢量集合中不同列进行相减的方式(利用join进行连接处理)
问题: 我有两个具有相同 ID 的特征集,我想从第二个特征集中减去第一个特征集的表格单元格。 我使用了这个函数,但它计算的是表 1 中第一个元素与表 2 中其他元素的减法。 我想逐个单元格计算减法。第一个表格中 id 为 1 的单元格减去第二个表格中 id 为 1 的单元格,2x2、…...

mnn-llm: 大语言模型端侧CPU推理优化
在大语言模型(LLM)端侧部署上,基于 MNN 实现的 mnn-llm 项目已经展现出业界领先的性能,特别是在 ARM 架构的 CPU 上。目前利用 mnn-llm 的推理能力,qwen-1.8b在mnn-llm的驱动下能够在移动端达到端侧实时会话的能力,能够在较低内存…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...