TypeScript中的“as const”是什么意思?类型断言!
as const 也是类型断言的一种
这被称为const断言。const断言告诉编译器为表达式推断出它能推断出的最窄或最特定的类型。如果不使用它,编译器将使用其默认类型推断行为,这可能会导致更广泛或更一般的类型。
请注意,它被称为“断言”,而不是“强制转换”。术语“cast”在TypeScript中通常是要避免的;当人们说“cast”时,它们通常意味着某种可以在运行时观察到的效果,但是TypeScript的类型系统,包括类型断言和const断言,从发出的JavaScript中被完全删除。因此,在运行时,使用as const的程序和不使用as const的程序完全没有区别。
不过,在编译时,有一个明显的区别。让我们看看在上面的例子中省略as const会发生什么:
const args = [8, 5];
// const args: number[]
const angle = Math.atan2(...args); // error! Expected 2 arguments, but got 0 or more.
console.log(angle);
编译器看到const args = [8, 5];,并推断出number[]的类型。这是一个由0个或更多number类型的元素组成的可变数组。编译器不知道有多少或哪些元素。这样的推断通常是合理的;通常,数组内容意味着要以某种方式进行修改。如果有人想写args.push(17)或args[0]++,他们会很乐意使用number[]类型。
不幸的是,下一行Math.atan2(…args)导致了一个错误。Math.atan2()函数正好需要两个数值参数。但是编译器只知道args是一个数字数组。它完全忘记了有两个元素,因此编译器抱怨说,当它只需要两个参数时,您正在用“0或更多”参数调用Math.atan2()。
将其与as const的代码进行比较:
const args = [8, 5] as const;
// const args: readonly [8, 5]
const angle = Math.atan2(...args); // okay
console.log(angle);
现在编译器推断args属于readonly [8, 5]类型。。。一个readonly元组,其值正好是按此顺序排列的数字8和5。具体来说,args.length被编译器精确地称为2。
这就足够下一行使用Math.atan2()了。编译器知道Math.atan2(…args)与Math.atan2(8, 5)相同,这是一个有效的调用。
TypeScript中的“as const”是什么意思?类型断言!相关推荐
- 第四节:5种数据类型在TypeScript中的运用
在上一节<第三节:快速编译TypeScript,提高开发效率>,我们学习了如何结合IDE快速地帮助我们编译TypeScript,有了这个辅助功能,我们的开发效率就大大提高. 接下来,我们就 ...
- 用typescript完成倒计时_TypeScript(一):类型
经过3个月的使用,在 TypeScript 方面学到了一些东西,总结一下. 在您阅读本文之前需要了解到的是,本文的内容仅是个人观点,我也并非 TypeScript 主要维护者和贡献者,也没有邀请 Ty ...
- 如何在TypeScript中删除数组项?
本文翻译自:How do I remove an array item in TypeScript? I have an array that I've created in TypeScript a ...
- Typescript中使用Axios
1)Vue.prototype 在vue项目main.js文件中: Vue.prototype.$appName = 'My App' 这样你可以通过在原型上定义它们使其在每个 Vue 的实例中可用. ...
- JavaScript 和 typeScript 中的 import、from
From:https://segmentfault.com/a/1190000018249137?utm_source=tag-newest Github - allowSyntheticDefaul ...
- gettype获取类名_在TypeScript中运行时获取对象的类名
在TypeScript中运行时获取对象的类名 是否可以使用typescript在运行时获取对象的类/类型名称? class MyClass{} var instance = new MyClass() ...
- TypeScript 中类型 any,void,unknown,never之间的区别
文章出自个人博客 https://knightyun.github.io/2021/04/03/js-ts-type-compare,转载请申明 TypeScript 拓展了 JavaScript 的 ...
- 【进阶】TypeScript 中的 Type
一 .什么是 TypeScript TypeScript 是静态编程语言 , 是 JavaScript 的超集 简而言之:JavaScript 有的 TypeScript 都有.JavaScript ...
- TypeScript 中的类型兼容性
Typescript 乃 JavaScript 子集.只要设置一下编译器为非严格模式,那么所有 JavaScript 代码皆是合法的 TypeScript 代码.为了可以适应不同的场景 TypeScr ...
最新文章
- \V110\Microsoft.CppCommon.targets(347,5): error MSB6006: “CL.exe”已退出,代码为 -1073741515。的解决方法
- 负载均衡算法 — 轮询
- C#实现UTC时间与Datetime转换
- POJ 2240题(Floyd)
- mysql产品优化方案,MySQL优化方案
- 【MySQL】向已有主键的表附加主键属性的自动编号
- JAVA Linux 排查CPU 过高的方法
- quartz定时器简单使用
- 使用matlab导入excel表格带有时间的数据并绘制曲线
- 关系数据库之关系代数
- JS+CSS竖向折叠滑动菜单代码
- c语言延时0.5s程序,C语言延时程序(ms,us)
- C语言_断言函数assert
- 计算机专业前沿算法,CNCC2018 | 研究经典计算机算法已经过时了吗?
- ODI之知识模块(KM)
- Python OpenCV Tesseract实现车牌的检测与识别
- 软碟通UltraISO v9.6.5.3237去插件官方版
- 记录前端常用代码规范
- 百度地图鼠标经过图层时高亮显示图标及标签内容
- 什么是企业宣传型网站?