【前端】【Ts】TypeScript的关键知识点
-
一、知识点总结
-
(一)void 与 never 的区别
- (1) void:声明函数无返回值,但可以走到 return 行。
- (2) never:表示函数不会走到 return 行,常用于抛异常或无限循环。
-
(二)字面量类型与联合类型的使用
- (1) 利用字面量类型和联合类型(使用 “|” 连接多个可能值)实现类似枚举的效果。
- (2) 限制变量只能取特定范围内的值。
-
(三)interface 接口的使用
- (1) 用于分离类型声明,提高代码的重用性和可读性。
- (2) 对函数的控制写法:可以通过接口来约束函数的参数和返回值类型。
-
// 对函数的控制写法 interface SumFunction {(a: number, b: number): number; } const sum: SumFunction = function (a: number, b: number): number {return a + b; }
-
- (3) 对数组的接口控制:通过接口限制数组的索引和对应值的类型。
-
interface MyArray {[index: number]: string; // 限制索引对应的值为 string 类型 } // 使用示例 let myArr: MyArray = ["a", "34"]; myArr[3] = "asdf"; // myArr["3"] = "cs" // 错误:索引必须为数字类型
-
- (4) 单继承和多继承:接口可以通过 extends 关键字实现单继承或多继承。
-
interface A extends B, C {// 接口内容 }
-
-
(四)keyof 的使用
- (1) 用于获取某个类型的所有键,返回一个联合类型。
- (2) 用法示例:
- 安全获取对象属性:
interface MyObject {number: string;name: string;age: number; } const myObj: MyObject = {number: '28324',name: 'xiaoming',age: 23 } function getProp(object: MyObject, props: keyof MyObject) {return object[props]; } // 等价于限定 props 只能为 'number' | 'name' | 'age'
- 安全获取对象属性:
- (3) 也可以用于实现类型映射,将一个类型中的所有属性转化为另一种形式。
-
(五)元组与数组
- (1) 元组:长度固定,每个元素类型可以单独设置。
-
const arr: [number, string] = [23, 'nihao'];
-
- (2) 数组:长度不固定,但所有元素类型必须一致。
-
const arr: number[] = [3, 34, 66];
-
- (1) 元组:长度固定,每个元素类型可以单独设置。
-
(六)any 与 unknown 的区别
- (1) any:具有赋值污染效应,赋值给其他类型时不会报错,但缺乏类型安全提示。
- (2) unknown:不会发生赋值污染,需要先进行类型断言或检查后才能赋值,保障类型安全。
-
(七)避免 unknown 赋值报错
- (1) 可使用 as 进行类型断言,将 unknown 类型转换为具体类型。
- (2) 也可使用其他类型转换方法确保赋值的安全性。
-
(八)枚举类型
- (1) 用于定义一组固定的常量,限制变量的取值范围。
- (2) 枚举成员既可以通过名称,也可以通过对应的数字访问。
-
enum Direction {North,East,South,West } const myDirection: Direction = Direction.North; // 或者直接赋值数字 const myDirection2: Direction = 0;
-
-
-
二、详细解析与总结
-
(一)关于 void 与 never
- (1) void 类型:主要用于标注函数无返回值,但函数内部仍可能存在 return 语句,只是不返回任何值。
- (2) never 类型:表明函数执行过程中不会正常结束,比如抛出错误或者进入无限循环,因而不会到达 return 语句。
-
(二)字面量类型与联合类型的灵活应用
- (1) 可以通过限定变量的取值范围,避免传入不合法的值,提升代码的健壮性。
- (2) 当多个固定值组合使用时,联合类型为代码提供了更高的灵活性和可读性。
-
(三)interface 的多重应用
- (1) 对象类型定义:通过 interface 分离类型声明,使代码结构更清晰。
- (2) 函数与数组控制:利用接口可以精确控制函数的参数、返回值以及数组中索引和值的类型。
- (3) 继承机制:支持单继承和多继承,有效复用已有类型定义,减少代码重复。
-
(四)keyof 的深入使用
- (1) 通过 keyof 可以动态获取对象的所有键,极大地增强了类型安全性和灵活性。
- (2) 在类型映射和安全获取对象属性时,keyof 都发挥着重要作用。
-
(五)元组与数组的特点比较
- (1) 元组:适用于固定长度和固定类型顺序的数据集合。
- (2) 数组:适用于长度不定但类型一致的数据集合。
-
(六)any 与 unknown 的取舍
- (1) any:使用时较为宽松,但可能会引发潜在的类型安全问题。
- (2) unknown:需要进行明确的类型判断或断言,更适合在追求严格类型安全的场景下使用。
-
(七)如何避免 unknown 类型带来的赋值问题
- (1) 使用类型断言(as)明确告知编译器变量实际类型,从而避免报错。
- (2) 通过合理的类型检查,确保变量转换过程中的安全性。
-
(八)枚举类型的实际应用
- (1) 枚举可以将一组相关的常量组织在一起,提高代码可读性和维护性。
- (2) 枚举成员既能通过名称引用,也能通过对应的数值访问,提供了灵活的使用方式。
-
-
三、总结
- 以上笔记涵盖了 TypeScript 中几种重要的类型和概念,从函数返回值的 void 与 never 区别,到字面量类型、联合类型以及接口的应用,再到 keyof、元组、数组、any 与 unknown 的区别,以及枚举类型的使用。
- 理解并熟练运用这些知识点,有助于在编写 TypeScript 代码时实现更严格的类型检查,提高代码的健壮性和可维护性。
相关文章:
【前端】【Ts】TypeScript的关键知识点
一、知识点总结 (一)void 与 never 的区别 (1) void:声明函数无返回值,但可以走到 return 行。(2) never:表示函数不会走到 return 行,常用于抛异常或无限循环。 (二)字面量类型与联…...
C++,STL,【目录篇】
文章目录 一、简介二、内容提纲第一部分:STL 概述第二部分:STL 容器第三部分:STL 迭代器第四部分:STL 算法第五部分:STL 函数对象第六部分:STL 高级主题第七部分:STL 实战应用 三、写作风格四、…...
2502vim,vim文本对象中文文档
介绍 文本块用户(textobj-user)是一个可帮助你毫不费力地创建自己的文本对象的Vim插件. 因为有许多陷阱需要处理,很难创建文本对象.此插件隐藏了此类细节,并提供了声明式定义文本对象的方法. 你可用正则式来定义简单的文本对象,或使用函数来定义复杂的文本对象.如… 文本对…...
【AI论文】直接对齐算法之间的差异模糊不清
摘要:直接对齐算法(DAAs)通过在对齐人类反馈的强化学习(RLHF)中用直接策略优化替代强化学习(RL)和奖励建模(RM),简化了语言模型对齐过程。DAAs可以根据其排序…...
(9)gdb 笔记(2):查看断点 info b,删除断点 delete 3,回溯 bt,
(11) 查看断点 info b: # info b举例: (12)删除断点 delete 2 或者删除所有断点: # 1. 删除指定的断点 delete 3 # 2. 删除所有断点 delete 回车,之后输入 y 确认删除所有断点 举…...
中间件的概念及基本使用
什么是中间件 中间件是ASP.NET Core的核心组件,MVC框架、响应缓存、身份验证、CORS、Swagger等都是内置中间件。 广义上来讲:Tomcat、WebLogic、Redis、IIS;狭义上来讲,ASP.NET Core中的中间件指ASP.NET Core中的一个组件。中间件…...
什么是ce认证
CE认证,即只限于产品不危及人类、动物和货品的安全方面的基本安全要求,而不是一般质量要求,协调指令只规定主要要求,一般指令要求是标准的任务。因此准确的含义是:CE标志是安全合格标志而非质量合格标志。是构成欧洲指令核心的&qu…...
S4 HANA手工记账Tax Payable – FB41
本文主要介绍在S4 HANA OP中手工记账Tax Payable – FB41。具体请参照如下内容: 手工记账Tax Payable – FB41 该事务代码用于手工处理税码统驭科目的记账,一般税码科目需要设置为只能自动记账,因此无法手工对税码统驭科目记账,但…...
Java 大视界 -- Java 大数据在智慧文旅中的应用与体验优化(74)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
[leetcode]两数之和等于target
源代码 #include <iostream> #include <list> #include <iterator> // for std::prev using namespace std; int main() { int target 9; list<int> l{ 2, 3, 4, 6, 8 }; l.sort(); // 确保列表是排序的,因为双指针法要求输入是…...
老游戏回顾:G2
一个老的RPG游戏。 剧情有独到之处。 ------- 遥远的过去,古拉纳斯将希望之光给予人们,人类令希望之光不断扩大,将繁荣握在手中。 但是,暗之恶魔巴鲁玛将光从人类身上夺走。古拉纳斯为了守护人类与其展开了一场激战,…...
行为驱动开发(BDD)如何提高自动化测试效率
在软件开发的过程中,自动化测试一直扮演着至关重要的角色。随着需求变化日益复杂、开发周期不断压缩,如何提升自动化测试的效率和准确性成为了现代软件开发团队的核心挑战之一。行为驱动开发(BDD,Behavior Driven Development&…...
大语言模型的「幻觉」(Hallucination)是指模型在生成内容时
大语言模型的「幻觉」(Hallucination)是指模型在生成内容时,输出看似合理但实际错误、虚构或与事实不符的信息。这种现象并非模型有意欺骗,而是由其底层技术原理和训练方式导致的必然结果。 幻觉的核心特征 类型示例事实性错误生…...
[25] cuda 应用之 nppi 实现图像色彩调整
[25] cuda 应用之 nppi 实现图像色彩调整 在 NPPI(NVIDIA Performance Primitives)中,图像色彩调整通常包括以下几种操作: 亮度调整:增加或减少图像的亮度。对比度调整:增强或减弱图像的对比度。饱和度调…...
Redis常见数据类型与编码方式
⭐️前言⭐️ 本小节围绕Redis中常见的数据类型与编码方式展开。 🍉欢迎点赞 👍 收藏 ⭐留言评论 🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 🍉博客中涉及源码及博主日常练习代码均已上传GitHu…...
inter i5 6300U 可以干嘛
Intel Core i5-6300U 是一款发布于 2015 年的双核四线程处理器,属于 Intel 第六代 Skylake 架构的低功耗移动处理器(TDP 15W)。虽然它不是最新的处理器,但在日常使用中仍然可以胜任许多任务。以下是它适合的用途: 1. 日…...
不可控的内存分配(CWE-789)
漏洞描述:内存分配的大小受外部控制的输入数据影响,且程序没有指定内存分配大小的上限 漏洞风险:攻击者可以使程序分配大量的内存,程序可能会因为内存资源不足而奔溃。 修复或规避建议: 设定合理的内存分配上限&…...
大型三甲医院算力网络架构的深度剖析与关键技术探索
一、引言 1.1 研究背景与意义 1.1.1 医疗信息化发展趋势 随着信息技术的迅猛发展,全球医疗行业正经历着深刻的数智化转型。数字化转型已成为医疗行业提升服务质量、优化运营效率、推动医学科研创新的关键驱动力。从电子病历系统的普及到远程医疗的广泛应用&#…...
获取要素类或表中的字段列表
要素类和表中往往包含一个或多个属性信息,可以通过ListFields()函数获取要素类中的字段列表. 操作方法: 1.打开IDLE,新建一个脚本窗口 2.导入arcpy模块 3.设置工作空间 arcpy.env.workspace "" 4.在try语句中对<>要素调用ListFields()方法 try:fieldlis…...
Android原生开发入门
1. 资源地址 Android官方教程Android参考手册 2. 必看基础模块 应用基础知识View 绑定 :绑定相当于Qt中的ui文件生成界面代码的机制,Qt中的ucc会自动将ui文件编译成ui_xxxx.h文件,Android开发中也一样。 Android中自动生成的代码在&#x…...
网络设备的安全加固
设备的安全始终是信息网络安全的一个重要方面,攻击者往往通过控制网络中设备来破坏系统和信息,或扩大已有的破坏。网络设备包括主机(服务器、工作站、PC)和网络设施(交换机、路由器等)。 一般说来ÿ…...
验证工具:VCS与Verdi介绍
VCS和Verdi都是Synopsys公司旗下的工具,在集成电路设计和验证领域发挥着重要作用。 VCS VCS,全称Verilog Compile Simulator,是Synopsys公司的一款Verilog仿真工具。它具有以下主要功能: 编译和仿真:VCS能够对Verilog设计代码和testbench进行编译,生成simv二进制可执行…...
CSV数据分析智能工具(基于OpenAI API和streamlit)
utils.py: from langchain_openai import ChatOpenAI from langchain_experimental.agents.agent_toolkits import create_csv_agent import jsonPROMPT_TEMPLATE """你是一位数据分析助手,你的回应内容取决于用户的请求内容。1. 对于文…...
【Day31 LeetCode】动态规划DP Ⅳ
一、动态规划DP Ⅳ 1、最后一块石头的重量II 1049 这题有点像脑筋急转弯,尽量让石头分成重量相同的两堆(尽可能相同),相撞之后剩下的石头就是最小的。明白这一点,就与上一篇博客里的划分等和数组很相似。划分等和数组…...
产品经理的人工智能课 02 - 自然语言处理
产品经理的人工智能课 02 - 自然语言处理 1 自然语言处理是什么2 一个 NLP 算法的例子——n-gram 模型3 预处理与重要概念3.1 分词 Token3.2 词向量化表示与 Word2Vec 4 与大语言模型的交互过程参考链接 大语言模型(Large Language Models, LLMs)是自然语…...
华为手机nova9,鸿蒙系统版本4.2.0.159,智慧助手.今天版本是14.x,如何卸载智慧助手.今天?
手欠,将手机鸿蒙系统升级到4.2.0.159后,出现了负一屏,负一屏就是主页向左滑,出现了,如图的界面: 华为鸿蒙系统负一屏的界面 通过在手机中我的华为-搜索“开启或关闭智慧助手.今天(负一屏&#…...
C#面试常考随笔13: 泛型的主要约束和次要约束是什么?
在 C# 泛型中,主要约束和次要约束用于限制泛型类型参数的使用,确保类型参数满足一定的条件,从而提高代码的可靠性和可维护性。以下是主要约束和次要约束的详细介绍: 主要约束 引用类型约束(class)&#x…...
win32汇编环境,窗口程序中自定义工具栏的使用示例
;运行效果 ;win32汇编环境,窗口程序中自定义工具栏的使用示例 ;工具栏一般放在菜单下面,相当于一个个小的对话框,当然你放在其它地方也可以。 ;原理是,创建一张BMP位图,比如下例用一张168*24的图,平均分成7部分&#x…...
【PyQt】pyqt小案例实现简易文本编辑器
pyqt小案例实现简易文本编辑器 分析 实现了一个简单的文本编辑器,使用PyQt5框架构建。以下是代码的主要功能和特点: 主窗口类 (MyWindow): 继承自 QWidget 类。使用 .ui 文件加载用户界面布局。设置窗口标题、状态栏消息等。创建菜单栏及其子菜单项&…...
2024最新版Node.js详细安装教程(含npm配置淘宝最新镜像地址)
一:Node.js安装 浏览器中搜索Nodejs,或直接用网址:Node.js — 在任何地方运行 JavaScript 建议此处下载长期支持版本(红框内): 开始下载,完成后打开文件: 进入安装界面,在此处勾选,再点击n…...
