Шпаргалка по TSConfig

Источник: «The TSConfig Cheat Sheet»
Узнайте о важнейших параметрах конфигурации TypeScript и создайте лаконичный файл tsconfig.json для своих проектов с помощью этой шпаргалки.

tsconfig.json пугает всех. Это огромный файл с огромным количеством дополнительных опций.

Но на самом деле существует всего несколько параметров конфигурации, которые должны вас интересовать. Давайте разберёмся с ними и составим шпаргалку.

Быстрый старт

Хотите только код? Вот, пожалуйста:

{
"compilerOptions": {
/* Базовый опции: */
"esModuleInterop": true,
"skipLibCheck": true,
"target": "es2022",
"allowJs": true,
"resolveJsonModule": true,
"moduleDetection": "force",
"isolatedModules": true,

/* Строгость */
"strict": true,
"noUncheckedIndexedAccess": true,

/* Если транспилируете с TypeScript: */
"moduleResolution": "NodeNext",
"module": "NodeNext",
"outDir": "dist",
"sourceMap": true,

/* А если вы собираете для библиотеки: */
"declaration": true,

/* А если вы собираете для библиотеки в монорепо: */
"composite": true,
"declarationMap": true,

/* Если НЕ транспилируете с TypeScript: */
"moduleResolution": "Bundler",
"module": "preserve",
"noEmit": true,

/* Если ваш код запускается в DOM: */
"lib": ["es2022", "dom", "dom.iterable"],

/* Если ваш код не запускается в DOM: */
"lib": ["es2022"]
}
}

Полное объяснение

Базовые опции

Вот базовые опции, которые я рекомендую для всех проектов.

{
"compilerOptions": {
"esModuleInterop": true,
"skipLibCheck": true,
"target": "es2022",
"allowJs": true,
"resolveJsonModule": true,
"moduleDetection": "force",
"isolatedModules": true
}
}

Строгость

Вот опции строгости, рекомендуемые мной для всех проектов.

{
"compilerOptions": {
"strict": true,
"noUncheckedIndexedAccess": true
}
}

Многие рекомендуют использовать опции строгости в tsconfig/bases, замечательном репозитории, в котором собраны опции TSConfig. Эти опции включают множество правил, которые я считаю слишком "шумными", например noImplicitReturns, noUnusedLocals, noUnusedParameters и noFallthroughCasesInSwitch. Рекомендую добавлять их в tsconfig.json только в том случае, если они вам нужны.

Транспиляция с TypeScript

Если вы транспилируете свой код (создаёте файлы JavaScript) с помощью tsc, вам понадобятся эти опции.

{
"compilerOptions": {
"moduleResolution": "NodeNext",
"module": "NodeNext",
"outDir": "dist"
}
}

Сборка для библиотеки

Если вы собираете проект для библиотеки, вам понадобится declaration: true.

{
"compilerOptions": {
"declaration": true
}
}

Сборка для библиотеки в монорепо

Если вы собираете библиотеку в моно репозитории, вам также понадобятся эти опции.

{
"compilerOptions": {
"declaration": true,
"composite": true,
"sourceMap": true,
"declarationMap": true
}
}

Без транспиляции с TypeScript

Если вы не транспилируете свой код с помощью tsc, то есть используете TypeScript скорее как линтер, вам пригодятся эти опции.

{
"compilerOptions": {
"moduleResolution": "Bundler",
"module": "preserve",
"noEmit": true
}
}

Выполняется в DOM

Если ваш код выполняется в DOM, вам понадобятся эти опции.

{
"compilerOptions": {
"lib": ["es2022", "dom", "dom.iterable"]
}
}

Не выполняется в DOM

Если ваш код не выполняется в DOM, вам понадобится lib: ["es2022"].

{
"compilerOptions": {
"lib": ["es2022"]
}
}

Это то же самое, что и выше, но без типов dom и dom.iterable.

Я что-то упустил?

Надеюсь, я дал немного вдохновения для следующего раза, когда понадобится настроить TypeScript.

Я что-то пропустил? Сообщите мне об этом, написав в X.

Дополнительные материалы

Предыдущая Статья

Доводы против самозакрывающихся тегов в HTML

Следующая Статья

Отключение сообщения packages are looking for funding в NPM