当前位置: 首页 > news >正文

Typescript 的类型断言

类型断言(Type Assertion)是 TypeScript 中的一种机制,允许开发者手动指定某个值的类型,而不是让 TypeScript 自动推断类型。类型断言通常用于在编译时告诉 TypeScript 编译器某个值的具体类型,以便在后续代码中进行类型检查和操作。

类型断言的语法

类型断言有两种语法形式:

  1. 尖括号语法<类型>值
  2. as 语法值 as 类型

示例代码

以下是一些示例代码,详细解释了类型断言的使用场景和方法。

示例 1:将 any 类型断言为 string 类型
let anyVar: any = "Hello, TypeScript!";// 使用尖括号语法进行类型断言
let str1: string = <string>anyVar;// 使用 as 语法进行类型断言
let str2: string = anyVar as string;console.log(str1.toUpperCase()); // 输出: HELLO, TYPESCRIPT!
console.log(str2.toUpperCase()); // 输出: HELLO, TYPESCRIPT!

在这个例子中,anyVar 被声明为 any 类型,并赋值为字符串 "Hello, TypeScript!"。通过类型断言,我们将 anyVar 断言为 string 类型,以便可以调用字符串的方法(如 toUpperCase)。

示例 2:将 unknown 类型断言为 number 类型
let unknownVar: unknown = 42;// 使用尖括号语法进行类型断言
let num1: number = <number>unknownVar;// 使用 as 语法进行类型断言
let num2: number = unknownVar as number;console.log(num1.toFixed(2)); // 输出: 42.00
console.log(num2.toFixed(2)); // 输出: 42.00

在这个例子中,unknownVar 被声明为 unknown 类型,并赋值为数字 42。通过类型断言,我们将 unknownVar 断言为 number 类型,以便可以调用数字的方法(如 toFixed)。

示例 3:类型断言与类型缩小
function printLength(value: string | number) {if (typeof value === "string") {// 类型缩小:value 在这里是 string 类型console.log(value.length);} else {// 类型缩小:value 在这里是 number 类型console.log(value.toFixed(2));}
}let mixedVar: string | number = "Hello";// 使用类型断言将 mixedVar 断言为 string 类型
let str: string = mixedVar as string;
console.log(str.length); // 输出: 5mixedVar = 42;// 使用类型断言将 mixedVar 断言为 number 类型
let num: number = mixedVar as number;
console.log(num.toFixed(2)); // 输出: 42.00

在这个例子中,mixedVar 被声明为 string | number 联合类型。通过类型断言,我们可以将 mixedVar 断言为 stringnumber 类型,以便在不同的上下文中使用相应的方法。

总结

  • 类型断言允许开发者手动指定某个值的类型,而不是让 TypeScript 自动推断类型。
  • 类型断言有两种语法形式:尖括号语法(<类型>值)和 as 语法(值 as 类型)。
  • 类型断言通常用于将 anyunknown 或其他联合类型的值断言为更具体的类型,以便在后续代码中进行类型检查和操作。

通过类型断言,开发者可以在需要时更精确地控制类型,从而提高代码的类型安全性和可维护性。

为什么需要类型断言?

虽然 ​any​ 类型允许你绕过类型检查,但在实际开发中,过度使用 ​any​ 类型会导致代码的可读性和可维护性下降,增加潜在的运行时错误风险。类型断言提供了一种更安全的方式来指定类型,从而在编译时捕获潜在的错误。

相关文章:

Typescript 的类型断言

类型断言&#xff08;Type Assertion&#xff09;是 TypeScript 中的一种机制&#xff0c;允许开发者手动指定某个值的类型&#xff0c;而不是让 TypeScript 自动推断类型。类型断言通常用于在编译时告诉 TypeScript 编译器某个值的具体类型&#xff0c;以便在后续代码中进行类…...

【设计模式】单例模式详解及应用实例

单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;保证一个类在整个程序的生命周期中只有一个实例&#xff0c;并提供一个全局访问点。单例模式广泛用于需要全局唯一实例的场景&#xff0c;比如数据库连接池、日志对象、线程池等。 单例模式…...

学习图解算法 使用C语言

图解算法 使用C语言 也就是通过C语言实现各种算法 链接&#xff1a;百度云盘 提取码&#xff1a;1001...

基于Netty实现TCP客户端:封装断线重连、连接保持

文章目录 引言I 基于Netty实现TCP客户端基于 Netty 创建客户端 时序图封装思路NettyClient 封装II 客户端的断线重连本质使用过程中断线重连重试策略III 心跳机制心跳检测处理器心跳机制实现逻辑IV 同步等待消息返回V 工具ForkJoinPoolByteConvertUtilsee also处理假死把handle…...

基于形状记忆聚合物的折纸超结构

​ 公众号端文章&#xff1a; 基于SMP的折纸超结构https://mp.weixin.qq.com/s?__bizMzkwMjc0MTE3Mw&mid2247484016&idx4&sn16f8d4aaaff76d776cec19bc0adbdd3b&chksmc0a1afaaf7d626bc0457d9cc4ba1b38424c2aad71ffec548715e47f5611cf00f10d5a511f3b3#rd 折…...

前端用html写excel文件直接打开

源码 <html xmlns:o"urn:schemas-microsoft-com:office:office" xmlns:x"urn:schemas-microsoft-com:office:excel" xmlns"http://www.w3.org/TR/REC-html40"> <head><meta charset"UTF-8"><!--[if gte mso 9]&…...

FastText 和 Faiss 的初探了解

概览 大模型目前已经是如火如荼的程度&#xff0c;各个大厂都有推出面向大众的基础大模型&#xff0c;同时诸多行业也有在训练专有大模型&#xff0c;而大模型的发展由来却是经过多年从文本检索生成、深度学习、自然语言处理&#xff0c;在Transformer架构出来后&#xff0c;才…...

微服务保护学习笔记(五)Sentinel授权规则、获取origin、自定义异常结果、规则持久化

文章目录 前言4 授权规则4.1 基本原理4.2 获取origin4.3 配置授权规则 5 自定义异常结果6 规则持久化 前言 微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装 微服务保护学习笔记(二)簇点链路、流控操作、流控模式(关联、链路) 微服务保护学习笔记(三)流控效果(…...

YOLOv8目标检测模型——遥感小目标检测经验分享

小目标检测——YOLOV8 一、引言 背景介绍 &#xff08;1&#xff09;目标检测的重要性 目标检测在许多领域都具有极其重要的作用。在自动驾驶中&#xff0c;目标检测能够识别道路上的障碍物和行人&#xff0c;确保行车安全。在视频监控中&#xff0c;目标检测能够实时发现异…...

构建响应式 Web 应用:Vue.js 基础指南

构建响应式 Web 应用&#xff1a;Vue.js 基础指南 一 . Vue 的介绍1.1 介绍1.2 好处1.3 特点 二 . Vue 的快速入门2.1 案例 1 : 快速搭建 Vue 的运行环境 , 在 div 视图中获取 Vue 中的数据2.2 案例 2 : 点击按钮执行 vue 中的函数输出 vue 中 data 的数据2.3 小结 三 . Vue 常…...

计算机毕业设计选题推荐-在线投票系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

【C/C++】程序的构建(编译)过程概述

&#x1f984;个人主页:小米里的大麦-CSDN博客 &#x1f38f;所属专栏:C_小米里的大麦的博客-CSDN博客 &#x1f381;代码托管:C: 探索C编程精髓&#xff0c;打造高效代码仓库 (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、前言 二、预处理&#xff08;Preprocessi…...

ElasticSearch-2-核心语法集群高可用实战-Week2

ES批量操作 1.批量获取文档数据 这里多个文档是指&#xff0c;批量操作多个文档&#xff0c;搜索查询文档将在之后的章节讲解 批量获取文档数据是通过_mget的API来实现的 (1)在URL中不指定index和type 请求方式&#xff1a;GET 请求地址&#xff1a;_mget 功能说明 &#…...

STM的CAN通信学习

显性电平&#xff1a;0 隐性电平&#xff1a;1 一、帧结构 1.帧类型 1&#xff09;数据帧&#xff1a;发送设备主动发送数据&#xff08;广播式&#xff09; 2&#xff09;请求帧&#xff1a;接收设备主动请求数据&#xff08;请求式&#xff09; 2.帧结构 1&#xff…...

【高等数学学习记录】函数

【高等数学&学习记录】函数 从事测绘工作多年&#xff0c;深刻感受到基础知识的重要及自身在这方面的短板。 为此&#xff0c;打算重温测绘工作所需基础知识。练好基本功&#xff0c;为测绘工作赋能。 1 知识点 1.1 函数 设数集 D ⊂ R D\subset R D⊂R&#xff0c;称映射…...

【springboot过ingress后无法获取X-Forwarded-For头信息】

springboot过ingress后无法获取X-Forwarded-For头信息 一、现象结论修改步骤ingressspringboot 排查流程本文参考 一、现象 项目使用spring boot 2.7.18&#xff0c;有个新需求是校验X-Forwarded-For头的所有来源ip合法性&#xff0c;线上环境出现取不到X-Forwarded-For头的问…...

表格标记<table>

一.表格标记、 1table&#xff1a;表格标记 2.caption:表单标题标记 3.tr:表格行标记 4.td:表格中数据单元格标记 5.th:标题单元格 table标记是表格中最外层标记&#xff0c;tr表示表格中的行标记&#xff0c;一对<tr>表示表格中的一行&#xff0c;在<tr>中可…...

Rust练手项目,写个有趣的小工具定时从一言网获取一段有趣的话并推送通知

Rust练手项目&#xff0c;写个有趣的小工具 代码 继续练习Rust, 写个小工具定时从一言网获取一段有趣的话并提示&#xff0c;如下 练习以下Rust点 并发编程 Mutex, Arc指针使用HTTP请求Windows Gui 代码 Cargo.toml [package] name "funny_word" edition "20…...

【隐私计算】Paillier半同态加密算法

一、何为同态加密&#xff08;HE&#xff09;&#xff1f; HE是一种特殊的加密方法&#xff0c;它允许直接对加密数据执行计算&#xff0c;如加法和乘法&#xff0c;而计算过程不会泄露原文的任何信息。计算的结果仍然是加密的&#xff0c;拥有密钥的用户对处理过的密文数据进…...

判断数字的奇偶[中秋快乐~]

题目描述 给定一个整数 n,编写程序判断数字 n 是奇数还是偶数&#xff0c;是奇数则输出 “odd”&#xff0c;偶数则输出 “even”。 输入格式 一行&#xff0c;一个整数 n。 输出格式 一行&#xff0c;如果 n 是奇数则输出 “odd”; 如果 nn 是偶数则输出 “even”。 样例…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...