考虑这种情况,我不小心重新定义了'name'字符串:
function printName( name:string )
{
let name = "Oops!";
console.log(name);
}
在这种情况下,我想要一个编译时错误。而且,我得到一个。 TypeScript在编译时给出“重复标识符'name'”。生活是美好的。
但是现在当我添加try / catch时,我不再收到错误。
function printName(name: string )
{
try
{
let name = "Oops!";
console.log("printName: " + name);
}
catch (e)
{
console.log("error:", e);
}
}
为什么我不再收到错误消息?我有什么办法可以在编译时仍然得到相同的错误?
编辑:显然,如果我将代码放在任何类型的块中(例如if-else),则在重新定义参数时都不会出错。显然,在这种情况下,TypeScript只是数字,我想在其自己的范围内创建一个新变量,因此内部名称变为name_1。有什么办法可以得到警告或错误吗?
答案 0 :(得分:3)
在这种情况下,无法获取TypeScript本身来产生错误。
在第一个示例中生成错误,因为该示例实际上在运行时会产生错误,例如:
SyntaxError:标识符'name'已经被声明
但是,在第二种情况下,您将name
块中的try
变量隐藏起来,这本身并不是问题。在运行时应该没问题(因为它不会引发错误)。
但是TypeScript编译器以外的工具可以帮助捕获此类问题。特别是,大多数短绒猫都有无遮盖的规则,例如ts-lint's no-shadowed-variable setting。
答案 1 :(得分:1)
您的let name = "Opps!"
位于try / catch块内并且具有自己的作用域的原因。
阅读此What's the difference between using "let" and "var" to declare a variable in JavaScript?