gpt4 book ai didi

javascript - 为什么 typescript 允许在声明变量之前使用它?

转载 作者:数据小太阳 更新时间:2023-10-29 04:03:43 26 4
gpt4 key购买 nike

Typescript 不会为以下代码给出编译器错误:

var b = a + 10; // Why no compilation error here

var a = 10;

alert(b.toString());

我希望第一行是一个错误,因为我到现在为止还没有声明或初始化 var a。

如果我删除第二行,我会得到编译器错误。

我知道它在 JavaScript 中有效,但我希望 TypeScript 给我编译错误或警告。

最佳答案

因为 hoisting behavior可能会令人困惑。你的代码实际上意味着。

var a, b

b = a + 10
a = 10

alert(b.toString())

有正当理由允许提升,但它们不涉及 var,而是 function - 您可以调用稍后声明的函数。

alert(identity(i))

function identity(i) {
return i
}

在这种情况下,alert 使用稍后声明的函数的结果。由于提升行为,它起作用了。

虽然我同意这种情况应该有一个警告(不是错误,TypeScript 希望与 JavaScript 兼容),但 TypeScript 目前似乎没有注意到这一点。 TypeScript 中的每个变量都有一个在变量的生命周期内不能改变的类型,在你的例子中, anumber 类型(它不知道你在赋值之前使用它,因为 var 隐式设置类型)。 TypeScript 假定它是一个数字,即使它不是,因为它的声明。

您可能想将此报告为 TypeScript 中的错误。

关于javascript - 为什么 typescript 允许在声明变量之前使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17273883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com