【前端】【Ts】TypeScript的关键知识点

news2025/2/6 6:37:29
  • 一、知识点总结

    • (一)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];
          
    • (六)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 代码时实现更严格的类型检查,提高代码的健壮性和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2293649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++,STL,【目录篇】

文章目录 一、简介二、内容提纲第一部分:STL 概述第二部分:STL 容器第三部分:STL 迭代器第四部分:STL 算法第五部分:STL 函数对象第六部分:STL 高级主题第七部分:STL 实战应用 三、写作风格四、…

【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中的一个组件。中间件…

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(); // 确保列表是排序的&#xff0c;因为双指针法要求输入是…

老游戏回顾:G2

一个老的RPG游戏。 剧情有独到之处。 ------- 遥远的过去&#xff0c;古拉纳斯将希望之光给予人们&#xff0c;人类令希望之光不断扩大&#xff0c;将繁荣握在手中。 但是&#xff0c;暗之恶魔巴鲁玛将光从人类身上夺走。古拉纳斯为了守护人类与其展开了一场激战&#xff0c…

行为驱动开发(BDD)如何提高自动化测试效率

在软件开发的过程中&#xff0c;自动化测试一直扮演着至关重要的角色。随着需求变化日益复杂、开发周期不断压缩&#xff0c;如何提升自动化测试的效率和准确性成为了现代软件开发团队的核心挑战之一。行为驱动开发&#xff08;BDD&#xff0c;Behavior Driven Development&…

Redis常见数据类型与编码方式

⭐️前言⭐️ 本小节围绕Redis中常见的数据类型与编码方式展开。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 &#x1f349;博客中涉及源码及博主日常练习代码均已上传GitHu…

大型三甲医院算力网络架构的深度剖析与关键技术探索

一、引言 1.1 研究背景与意义 1.1.1 医疗信息化发展趋势 随着信息技术的迅猛发展&#xff0c;全球医疗行业正经历着深刻的数智化转型。数字化转型已成为医疗行业提升服务质量、优化运营效率、推动医学科研创新的关键驱动力。从电子病历系统的普及到远程医疗的广泛应用&#…

CSV数据分析智能工具(基于OpenAI API和streamlit)

utils.py&#xff1a; from langchain_openai import ChatOpenAI from langchain_experimental.agents.agent_toolkits import create_csv_agent import jsonPROMPT_TEMPLATE """你是一位数据分析助手&#xff0c;你的回应内容取决于用户的请求内容。1. 对于文…

产品经理的人工智能课 02 - 自然语言处理

产品经理的人工智能课 02 - 自然语言处理 1 自然语言处理是什么2 一个 NLP 算法的例子——n-gram 模型3 预处理与重要概念3.1 分词 Token3.2 词向量化表示与 Word2Vec 4 与大语言模型的交互过程参考链接 大语言模型&#xff08;Large Language Models, LLMs&#xff09;是自然语…

华为手机nova9,鸿蒙系统版本4.2.0.159,智慧助手.今天版本是14.x,如何卸载智慧助手.今天?

手欠&#xff0c;将手机鸿蒙系统升级到4.2.0.159后&#xff0c;出现了负一屏&#xff0c;负一屏就是主页向左滑&#xff0c;出现了&#xff0c;如图的界面&#xff1a; 华为鸿蒙系统负一屏的界面 通过在手机中我的华为-搜索“开启或关闭智慧助手.今天&#xff08;负一屏&#…

win32汇编环境,窗口程序中自定义工具栏的使用示例

;运行效果 ;win32汇编环境,窗口程序中自定义工具栏的使用示例 ;工具栏一般放在菜单下面&#xff0c;相当于一个个小的对话框&#xff0c;当然你放在其它地方也可以。 ;原理是&#xff0c;创建一张BMP位图&#xff0c;比如下例用一张168*24的图&#xff0c;平均分成7部分&#x…

【PyQt】pyqt小案例实现简易文本编辑器

pyqt小案例实现简易文本编辑器 分析 实现了一个简单的文本编辑器&#xff0c;使用PyQt5框架构建。以下是代码的主要功能和特点&#xff1a; 主窗口类 (MyWindow): 继承自 QWidget 类。使用 .ui 文件加载用户界面布局。设置窗口标题、状态栏消息等。创建菜单栏及其子菜单项&…

2024最新版Node.js详细安装教程(含npm配置淘宝最新镜像地址)

一&#xff1a;Node.js安装 浏览器中搜索Nodejs&#xff0c;或直接用网址:Node.js — 在任何地方运行 JavaScript 建议此处下载长期支持版本&#xff08;红框内&#xff09;: 开始下载&#xff0c;完成后打开文件: 进入安装界面&#xff0c;在此处勾选&#xff0c;再点击n…

【HTML入门】Sublime Text 4与 Phpstorm

文章目录 前言一、环境基础1.Sublime Text 42.Phpstorm(1)安装(2)启动Phpstorm(3)“启动”码 二、HTML1.HTML简介(1)什么是HTML(2)HTML版本及历史(3)HTML基本结构 2.HTML简单语法(1)HTML标签语法(2)HTML常用标签(3)表格(4)特殊字符 总结 前言 在当今的软件开发领域&#xff0c…

JVS低代码逻辑引擎多种业务场景触发案例配置:涵盖列表页按钮、表单数据、流程审批、外部API接口调用等

逻辑引擎作为JVS低代码开发套件的核心组件&#xff0c;专注于业务逻辑的快速构建与实现&#xff0c;它扮演着程序配置与执行的核心角色&#xff0c;适用于多样化的应用场景。该逻辑引擎设计灵活&#xff0c;能够通过多种配置方式被触发&#xff0c;以精准响应各类业务需求并实现…

RabbitMQ 从入门到精通:从工作模式到集群部署实战(一)

#作者&#xff1a;闫乾苓 文章目录 RabbitMQ简介RabbitMQ与VMware的关系架构工作流程RabbitMQ 队列工作模式及适用场景简单队列模式&#xff08;Simple Queue&#xff09;工作队列模式&#xff08;Work Queue&#xff09;发布/订阅模式&#xff08;Publish/Subscribe&#xff…