«Использовать строгий» необходимо в файле TypeScript?

126

Я видел сообщения о том, где поместить строку «использовать строгий» в файл кода TypeScript. У меня вопрос, а зачем он вообще?

Поскольку TypeScript уже является строго типизированным языком, что добавляет «использовать строгий»?

DeborahK
источник
2
stackoverflow.com/questions/1335851/…
Дэниел А. Уайт,
12
Предоставленная вами ссылка определяет, для чего нужно использовать "строгий" в файле JavaScript. Мой вопрос в том, действительно ли он по-прежнему полезен / необходим в файле TypeScript, где редакторы с поддержкой TypeScript и Typescript будут улавливать большинство / все (?) Проблем, которые может уловить "use strict".
DeborahK,
Он вам также понадобится, если вы собираете его для ES6, а затем используете что-то вроде Babel, он требует, чтобы сгенерированный скрипт содержал"use strict";
BrunoLM
Не помещайте его в файл TS, добавьте флаг в tsconfig.json --alwaysStrict: Анализируйте в строгом режиме и выдавайте «use strict» для каждого исходного файла
Дренай

Ответы:

107

Обновления

  • TypeScript 1.8+: "use strict";издается в модулях ( Подробнее ).
  • TypeScript 2.1+: --alwaysStrictопция компилятора анализирует все файлы в строгом режиме и выводит "use strict"их поверх всех выводимых файлов ( Подробнее ).

Вы можете найти список некоторых примеров, выполнив поиск в тестах TypeScript по запросу «в строгом режиме».

Вот несколько примеров кода, который выдает ошибку времени компиляции только в следующих случаях "use strict";:

// future reserved keyword not allowed as variable name
var let,
    yield,
    public,
    private,
    protected,
    static,
    implements;

// "delete" cannot be called on an identifier
var a;
delete a;

// octal literals not allowed
03;

Есть еще несколько примеров, когда "use strict";ошибка возникает только во время выполнения. Например:

"use strict";
delete Object.prototype;

Лично я не считаю все это полезным для предотвращения ошибок в TypeScript, а дополнительный шум, который он добавляет в файл, заставляет меня не утруждать себя его написанием. Тем не менее, начиная с TS 2.1, я включу параметр --alwaysStrictкомпилятора, потому что он добавляет небольшую дополнительную строгость без каких-либо накладных расходов на обслуживание кода.

Дэвид Шеррет
источник
Здорово, что модульные тесты TypeScript охватывают это. Я проверю это. Спасибо за примеры. И я согласен больше не включать его в наши «стандарты кодирования» для TypeScript.
DeborahK
Обратите внимание, что если вы используете внешние модули, любая use strictстрока, объявленная в верхней части файла TS, может появиться внутри функции модуля, а не в верхней части файла, что немного изменит семантику.
billc.cn
на моей машине TypeScript 1.4 не позволяет использовать восьмеричные литералы при нацеливании на ECMAScript 5 или выше, даже если они не используются"use strict;"
Джереми
18

На мои деньги, да , "use strict";должен быть включен в файлы TypeScript.

Не обращая внимания на влияние времени компиляции"use strict"; на Typescript, вероятно, есть влияние времени выполнения, когда сгенерированный javascript выполняется:

Джереми
источник