typescript - 为什么函数表达式和函数声明对一个变量有不同的推断结果?
问题描述
我有一个变量和三个函数:
const a: string | number = 3
function b(){
console.log(a) // string | number
}
const c = function (){
console.log(a) // number
}
const d = () => {
console.log(a) // number
}
当我将这个词悬停a
在函数b
中时,我得到的是string | number
;
当我将这个词悬停a
在函数c
中时,我得到的是number
;
当我将这个词悬停a
在函数d
中时,我得到的是number
但不是a
常数吗?在第一次被赋值之后,它3
被a
推断为一种number
类型。为什么在功能b
上它还有机会成为string
类型?
解决方案
我相信这是因为功能提升。理论上,b
可以在a
明确分配其值之前调用:
b(); // <=====
const a: string | number = 3
function b(){
console.log(a) // string | number
}
const c = function (){
console.log(a) // number
}
const d = () => {
console.log(a) // number
}
既不能从那里调用,也不能从那里调用,直到c
明确分配之后才分配它们。d
a
从运行时的角度来看,b
尝试访问时会抛出对的调用,a
因为a
将在时间死区中,但从类型的角度来看,它会在 TypeScript 知道它是number
.
推荐阅读
- jqgrid - 在搜索对话框中添加新运算符
- java - 当我通过扫描下一行输入时如何打破while循环
- c# - WPF 显示对话框触摸问题
- java - 使用java连接mysql数据库失败
- swift - 如何访问 ARSCNDebugOptions.showBoundingBoxes?
- mysql - 如何使用字符串数组搜索 MySQL 数据库?
- tableview - 无法访问表视图单元格中 Struct 中的值。阅读下面截图中描述的代码
- excel - 修复 Access VBA 中的“变量未定义”,以使用“Application.Calculation=xlCalculationManual”关闭自动计算
- google-apps-script - 有没有脚本来做查询和导入范围结合的功能
- c# - 两个线程访问全局变量时的意外结果