ts 内置类型与类型断言

news/2024/12/21 18:28:12/
ts 内置类型与类型断言
// 变量 函数不显式声明类型 会被推导为any
// unknow和any 区别 any是代表自己可以是任何类型 unknown代表目前未确定是什么类型 但是将来会有一个确定类型
//一个 unknown 类型的变量可以再次赋值为任意其它类型,但只能赋值给 any 与 unknown 类型的变量let unknownVar: unknown;let unknownVar: unknown;
// unknownVar.foo();  报错:对象类型为 unknown
(unknownVar as { foo: () => {} }).foo(); // 类型断言就不会报错// never类型不携带任何类型信息,是所有类型的子类型
// 它主要被类型检查所使用
function justThrow(): never {throw new Error
}// 类型断言 显式告知类型检查程序当前这个变量的类型
const str1: string = "lcq";
(str1 as any).func()// 如果不使用断言直接用union 判断某一个分支就会报错
function foo(union: string | number) {if ((union as string).includes("linbudu")) { }if ((union as number).toFixed() === '599') { }
}

型断言的正确使用方式是,在 TypeScript 类型分析不正确或不符合预期时,将其断言为此处的正确类型

双重断言
//双重断言  ,原类型与断言类型之间差异过大 TypeScript 会给你一个类型报错
// 比如string 类型直接推断到对象
// 需要断言到 unknown 类型,再断言到预期类型
const str12: string = 'lcq';
(str as unknown as { handler: () => {} }).handler();
// 使用尖括号断言
(<{ handler: () => {} }>(<unknown>str12)).handler();
非空断言
// 非空断言
declare const foo12: {func?: () => ({prop?: number | null;})
};
foo12.func!().prop!.toFixed()
// 可选链也能实现类似效果
foo12.func?.().prop?.toFixed();//非空断言常见场景
const element = document.querySelector("#id")!;
const target = [1, 2, 3, 599].find(item => item === 599)!;// 非空断言是类型断言的简写
((foo12.func as () => {prop?: number;
})().prop as number).toFixed();// 类型断言还有一种用法是作为代码提示的辅助工具
interface IStruct {foo: string;bar: {barPropA: string;barPropB: number;barMethod: () => void;baz: {handler: () => Promise<void>;};};
}// 实现一个对象 直接使用类型标注会报错 比如完整实现每个属性 方法
// const iStruct: IStruct = {};// 使用类型断言可以不报错
const iStruct = <IStruct>{bar: {baz: {handler: ()=>{}},},
}

http://www.ppmy.cn/news/1556985.html

相关文章

5G 模组 RG200U常用AT命令

5G 模组 RG200 U常用AT命令 5G 模组 RG200 U常用AT命令 ATQCFG“usbnet”,3 ATQICSGP2,1,“”,“cmnet”,“”,1 APN ATQNETDEVCTL2,3,1 ATCFUN0 将 UE 设置为最小功能模式 ATCFUN1 将 UE 设置为全功能模式 ATQENG“servingcell” 查询服务小区信息 ATQNETDEVCTL1,3,1 拨…

基于Java的秦皇岛旅游景点管理系统

一、系统背景与目的 秦皇岛&#xff0c;作为中国著名的旅游城市&#xff0c;拥有丰富的自然景观和人文历史遗迹。为了提升秦皇岛旅游景点的管理效率和服务质量&#xff0c;基于Java的旅游景点管理系统应运而生。该系统旨在通过信息化手段&#xff0c;实现旅游景点的智能化管理…

咸虾米壁纸微信小程序下载图片到相册saveImageToPhotosAlbum功能修改

当我将咸虾米壁纸这个项目进行重构的时候&#xff0c;想要将图片资源变得小一点&#xff0c;所以在上传图片的时候均采用了webp格式的&#xff0c;这样就导致再预览页面下载图片的时候出错了&#xff0c;之前使用的是uni.getImageInfo()这个API&#xff0c;该API不支持webp图片…

VSCode如何修改默认扩展路径和用户文件夹目录到D盘

在使用Visual Studio Code&#xff08;VSCode&#xff09;时&#xff0c;随着安装的扩展和用户数据的增多&#xff0c;C盘的空间可能会逐渐紧张。为了优化存储管理&#xff0c;将VSCode的默认扩展路径和用户文件夹目录迁移到D盘是一个有效的解决方案。以下是详细的操作步骤&…

微软 Phi-4:小型模型的推理能力大突破

在人工智能领域&#xff0c;语言模型的发展日新月异。微软作为行业的重要参与者&#xff0c;一直致力于推动语言模型技术的进步。近日&#xff0c;微软推出了最新的小型语言模型 Phi-4&#xff0c;这款模型以其卓越的复杂推理能力和在数学领域的出色表现&#xff0c;引起了广泛…

高级java每日一道面试题-2024年12月20日-Spring篇-Autowired和Resource注解的区别?

如果有遗漏,评论区告诉我进行补充 面试官: Autowired和Resource关键字的区别? 我回答: 在Java高级面试中&#xff0c;Autowired和Resource是两个经常被提到的注解&#xff0c;它们主要用于Spring框架中的依赖注入。下面是对这两个注解的详细解释和它们之间的区别&#xff1…

如何创建属于自己的大语言模型:从零开始的指南

如何创建属于自己的大语言模型&#xff1a;从零开始的指南 为什么要创建自己的大语言模型&#xff1f; 随着人工智能的快速发展&#xff0c;大语言模型&#xff08;LLM&#xff09;在各种场景中表现出了卓越的能力&#xff0c;例如文本生成、对话交互和内容总结等。虽然市场上…

Unity复刻胡闹厨房复盘 模块一 新输入系统订阅链与重绑定

本文仅作学习交流&#xff0c;不做任何商业用途 郑重感谢siki老师的汉化教程与代码猴的免费教程以及搬运烤肉的小伙伴 版本&#xff1a;Unity6 模板&#xff1a;3D 核心 渲染管线&#xff1a;URP ------------------------------…