Skip to content

Опции tsconfig объяснённые

Опции tsconfig, которые действительно важны, сгруппированные по задачам: ужесточить проверку типов, задать целевой уровень языка и модули, управлять тем, что попадает в вывод, отобразить пути импорта, структурировать сборки из нескольких проектов и настроить остальные проверки.

tsconfig сообщает компилятору, какие файлы включать и насколько строго проверять. Две опции делают основную часть работы: target задаёт уровень генерируемого JavaScript, а strict включает проверки безопасности одним пакетом. Ниже перечислены опции, которые меняют поведение; флаги, включённые по умолчанию, отмечены. Наследуйте конфигурацию от базовой и переопределяйте только отличия.

Справочная таблица · 55 записи
55 of 55 rows
Строгость
Главный выключатель: включает strictNullChecks, noImplicitAny и ещё несколько сразу.
Ошибка у параметров и переменных, тип которых нельзя вывести (иначе был бы any).
null и undefined больше нельзя присвоить любому типу; нужно явное согласие.
Параметры функций проверяются контравариантно; ловит некорректные типы параметров колбэков.
Проверка типов bind, call и apply по объявленным параметрам функции.
Ошибка, когда поле класса без начального значения и не присваивается в конструкторе.
Опциональное свойство { p?: T } больше не принимает явное присваивание undefined.
Требует ключевое слово override у членов, затеняющих член базового класса.
Ошибка у объявленных локальных переменных, которые никогда не читаются.
Ошибка у объявленных параметров функции, которые никогда не читаются.
Ошибка у инструкций-выражений без эффекта.
Доступ через точку запрещён для ключей из index signature; используйте скобки (obj["key"]).
Ошибка, когда один путь кода возвращает значение, а другой — нет.
Ошибка, когда case в switch проваливается в следующий без break.
Язык и модули
Уровень генерируемого JavaScript (напр. ES2022); более новые цели дают меньше downleveling.
Доступные встроенные API (напр. ES2022, DOM, DOM.Iterable).
Система модулей в генерируемом коде (напр. ESNext, CommonJS, NodeNext).
Настоящие правила Node: каждый файл выбирает CJS или ESM по ближайшему package.json, а относительным импортам нужны расширения файлов.
Как разрешаются пути импорта (напр. bundler, node, nodenext).
Когда файл считается модулем: auto (по наличию import/export), legacy или force (всегда).
Разрешает стиль default-импорта из CommonJS-модулей (по умолчанию true в большинстве настроек).
Разрешает default-импорты из модулей, экспортирующих только именованные значения (только на уровне типов).
Импорты попадают в вывод ровно как записаны; импорты только типов должны использовать import type (TS 5).
Позволяет импортам загружать файлы .json как типизированные значения.
Включает файлы .js во входные данные компиляции.
Проверяет типы и в файлах .js, читая их JSDoc-комментарии; влечёт allowJs.
Как компилируется .tsx: react-jsx (автоматический рантайм), react (React.createElement) или preserve.
Ограничивает автоматически подключаемые пакеты @types этим списком; пустой массив не подключает ничего.
Папки, сканируемые на пакеты @types, вместо всех node_modules/@types вверх по дереву.
Гарантирует, что каждый файл транспилируется изолированно (требуется бандлерами и esbuild).
Генерация кода
Куда записывается скомпилированный JavaScript.
Корень исходных файлов; держит форму дерева вывода стабильной.
Пишет файлы .js.map, чтобы отладчики отображали всё обратно в TypeScript.
Встраивает source map комментарием внутрь файла .js вместо отдельного файла .js.map.
Пишет декларации типов .d.ts (нужно для библиотек).
Пишет файлы .d.ts.map, чтобы редакторы переходили из деклараций обратно к исходнику TypeScript.
Пишет только файлы .d.ts; JavaScript остаётся бандлеру (требует declaration или composite).
Переиспользует хелперы вроде __rest из tslib вместо вставки их в каждый файл.
Корректные for..of, spread и деструктуризация по итерируемым, когда target ниже ES2015.
Вырезает комментарии из генерируемого JavaScript.
Только проверка типов; файлы не пишутся (используется, когда вывод делает бандлер).
Пути
Базовый каталог для разрешения модулей по не-относительным путям.
Отображает префиксы импорта на расположения, напр. { "@/*": ["src/*"] }.
Считает несколько каталогов одним виртуальным корнем при разрешении.
Структура проекта
Помечает проект как собираемый для project references (включает declaration, incremental).
Зависимость от других проектов tsconfig ради более быстрых изолированных сборок.
Сохраняет информацию сборки, чтобы в следующий раз пропустить неизменённые файлы.
Прочие проверки
Пропускает проверку типов файлов .d.ts ради скорости (по умолчанию true).
Ошибка у импортов, расходящихся с реальным регистром имени файла.
Доступ по индексу к массивам возвращает T | undefined, а не T.
Поля классов создаются через Object.defineProperty вместо простого присваивания (по умолчанию true для целей ES2022+).
Включает устаревший синтаксис декораторов, на котором держатся старые фреймворки (до стандартизации).
Сообщает полные имена типов в ошибках вместо обрезания длинных.
Ошибка, когда «голый» импорт ради побочного эффекта (import "./x.css") ничего не находит.
Разрешает пути импорта, заканчивающиеся на .ts (требует noEmit или emitDeclarationOnly).