TypeScript:当我用'let'重新定义变量时,有什么办法得到编译时错误?

时间:2018-10-09 21:22:53

标签: typescript

考虑这种情况,我不小心重新定义了'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。有什么办法可以得到警告或错误吗?

2 个答案:

答案 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?