Что означает "использовать строгий" для кода TypeScript?

Этот вопрос является копией "Использовать Strict" , необходимой в файле TypeScript?

Есть несколько ответов, но не ясно, что означает "использовать строгий" оператор в TypeScript, когда tsc обучает мне строгие ошибки режима без этого утверждения.

Но решил спросить, как разделить вопрос, хорошо.

Я использую TypeScript 1.6 и для меня непонятно, что означает "использовать строгий" оператор add в 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 показывает мне:

  • Ошибка: (16, 19) TS2300: Дублировать идентификатор 'a'.
  • Ошибка: (24, 9) TS1101: инструкции "с" не допускаются в строгом режиме.
  • Ошибка: (8, 18) TS2300: Дублирующий идентификатор 'p'.
  • Ошибка: (2, 5) TS1121: Октальные литералы запрещены в строгом режиме.
  • Ошибка: (11, 16) TS1102: "delete" не может быть вызван в идентификаторе в строгом режиме.
  • Ошибка: (16, 9) TS2300: Дублировать идентификатор 'a'.
  • Ошибка: (8, 24) TS1117: Литеральный объект не может иметь несколько свойств с тем же именем в строгом режиме.
  • Ошибка: (8, 24) TS2300: Дублирующий идентификатор 'p'.

Ответ 1

Я использую TypeScript 1.6 и для меня неясно, что делает "использование строгой" инструкции в TypeScript?

В TypeScript время компиляции он также добавляет проверки имен переменных. Например. следующее в порядке

var implements = 123;

Но следующие ошибки:

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

Примечание. TypeScript также предотвращает другие ошибки, независимо от строгих деклараций режима, которые происходят в ваших образцах.

Ответ 2

Оператор "use strict" влияет на время выполнения, поэтому, если что-то недействительное в строгом режиме прошло мимо компилятора TypeScript, оно все равно выведет ошибку во время выполнения.