"使用严格模式"对TypeScript代码有什么影响?

9
这个问题是“在TypeScript文件中需要使用严格模式吗?”的一个副本。
有一些答案,但是不清楚在TypeScript中,“use strict”语句是用来做什么的,当没有这个语句时,tsc会显示严格模式错误。
但我还是决定把它作为一个单独的问题来问。
我正在使用TypeScript 1.6,但我不清楚“use strict”语句在TypeScript中添加了什么?
使用“use strict”;语句看起来像是双重检查。 因为如果没有这个语句,tsc会显示严格模式错误。
例如:
class Foo {
03;
constructor(public name:string) {
}

move(meters:number) {

    let o = {p: 1, p: 2};

    let a;
    delete a;
    alert(this.name + " moved " + meters + "m.");

}

sum(a:number, a:number, c:number):number { 
    var sum = 015 +
        197 +
        142;


    var x = 17;
    with (obj)
    {
        x;
    }

    [1, 2, 3, 4, 5].map(function (n) {
        return !(n > 1) ? 1 : arguments.callee(n - 1) * n;
    });

    delete sum;

    return a + b + c;
}

tsc显示:

  • Error:(16, 19) TS2300:重复标识符“a”。
  • Error:(24,9) TS1101:在严格模式下不允许使用“with”语句。
  • Error:(8, 18) TS2300:重复标识符“p”。
  • Error:(2, 5) TS1121:在严格模式下不允许使用八进制字面量。
  • Error:(11, 16) TS1102:在严格模式下无法对标识符使用“delete”。
  • Error:(16, 9) TS2300:重复标识符“a”。
  • Error:(8, 24) TS1117:在严格模式下,对象文字不能具有多个具有相同名称的属性。
  • Error:(8, 24) TS2300:重复标识符“p”。

请注意,您已链接到两个不同的问题 - 并且不清楚您正在寻找什么信息,除了在您也“回答”的此答案中已经存在的内容? - James Thorpe
2个回答

10

我正在使用TypeScript 1.6,但对于我来说,“use strict”语句在TypeScript中到底添加了什么不是很清楚?

对于TypeScript编译时,它还会添加变量名称检查。例如,以下内容是可以的。

var implements = 123;

但以下错误:

"use strict";
var implements = 123; // Error: implements is a reserved keyword in strict mode 

注意: TypeScript也会防止其他错误,而不管是否使用了严格模式声明,这就是您示例中发生的情况。


2
< p > "use strict"语句会影响运行时,在严格模式下,如果 TypeScript 编译器中有错误的代码通过了编译,它仍然会在运行时抛出错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接