Typescript - перенос кода JS со строгими флагами - PullRequest
0 голосов
/ 28 октября 2018

Я начинаю мигрировать большую кодовую базу JS в TS.

Как рекомендовано в документе Миграция из JavaScript , я начал с установки tsconfig.json файла на allowJs: true.

Процедура миграции такова, что всякий раз, когда я добавляю новый файл в кодовую базу, я добавляю его в TS.

Поскольку я хочу быть как можно более строгим для этих новых файлов TS, я добавил различные параметры строгости в файл tsconfig.json, такие как "noImplicitAny": true, "noImplicitThis": true.

Дело в том,как только я это сделаю, я получаю массу ошибок для всех моих неперемещенных файлов JS, которые, конечно же, не имеют типизаций для различных аргументов и поэтому имеют неявный тип any.

Что такое предлагаемый рабочий процессв таком состоянии?Как описано выше, я хочу:

  • Будьте максимально строгими для новых создаваемых мной файлов TS.
  • Выполните стандартные проверки TS для моих файлов JS, например, unreached code илиunused variables.
  • Отсутствие такой же строгости TS в моих файлах JS, как это будет означать, что мне нужно перенести весь мой код в TS сразу, что на самом деле неосуществимо.

Возможно ли это как-то с разными tsconfig.json файлами для файлов JS и TS?

Какова здесь лучшая практика?

Редактировать:

Как упоминал Мэтт в комментарии ниже, я действительно использовал флаг checkJs: true, который вызвал ошибки компиляции в файлах JS.

Я понял, что даже не перенося ваши файлы JS на TS, вы получаетепроверка типа «из коробки», даже когда вы используете файлы .js, но у меня этого не происходит.

Без флага checkJs я получаю Unreachable code detected и 'x' is declared but is never usedпредупреждения, но это, кажется, это так.По какой-то причине я был уверен, что он также поймает что-то вроде следующего:

let num = 12;
num = "aa";

Но он не отображает никаких предупреждений (и intellisense не «знает», что num имеетвведите number).

При повторном прочтении статьи Миграция с JavaScript (раздел «Ранние преимущества») я вижу, что на самом деле все, что я получаю, очень ограниченоподдержка проверки ввода.

Итак, последнее, прежде чем я закрою этот вопрос - это как-то настраивается или это все?

1 Ответ

0 голосов
/ 30 октября 2018

Вам действительно придется использовать два tsconfig.json файла, один с "noImplicitAny": true (и любыми аналогичными параметрами), но не "checkJs": true, а другой с "checkJs": true, но не "noImplicitAny": true.Должно быть просто заставить вашу систему сборки запускать tsc один раз для каждого tsconfig.json файла и показывать все ошибки.Возможно, вы захотите установить "noEmit": true в одном из двух файлов.(Если вам нужна помощь в этом, дайте мне знать.)

Если вы используете код Visual Studio в качестве своей IDE, то, судя по моим кратким тестам, не существует способа получить Visual StudioЯзыковая служба кода TypeScript (используется для создания отчетов об ошибках при редактировании) для применения различных файлов tsconfig.json к исходным файлам TypeScript и JavaScript (если только вы не можете разделить файлы на две папки с зависимостями, идущими только в одном направлении, которое не отображаетсябыть вашим сценарием).Таким образом, вам придется выбрать одну из двух конфигураций в качестве основной конфигурации и обратиться к выходным данным сборки для ошибок, обнаруженных только другой конфигурацией.(Я не могу говорить о других IDE.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...