Skip to main content

tsconfig.json

npm create vite@latest . -- --template vanilla-ts

BASE:

{
  "compilerOptions": {
    "target": "ESNext",
    "useDefineForClassFields": true,
    "module": "ESNext",
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "skipLibCheck": true,

    /* Bundler mode */
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "isolatedModules": true,
    "moduleDetection": "force",
    "noEmit": true,

    /* Linting */
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true,
    "noUncheckedSideEffectImports": true
  },
  "include": ["src"],
  "types": ["vite/client"]
}


CURRENT:

{
    "compilerOptions": {
        //? Настройки версии JavaScript
        // Компилирует код в последнюю версию JavaScript. Возможные значения: "ES5", "ES6", "ES2017", "ESNext".
        "target": "ESNext",
        // Определяет, какой модульный стандарт используется (CommonJS, ESNext, AMD и др.).
        //! В браузере лучше "ESNext", в Node.js — "CommonJS".
        "module": "ESNext",
        // Разрешает модули так, как это делает Node.js.
        "moduleResolution": "node",

        //? Библиотеки и окружение
        // Определяет, какие API доступны (например, DOM для работы в браузере).
        "lib": ["ESNext", "DOM", "DOM.Iterable"],

        //? Проверки и строгий режим
        // Включает все строгие проверки TypeScript (аналог набора из noImplicitAny, strictNullChecks, strictFunctionTypes и др.).
        "strict": true,
        // Запрещает использование any без явного указания.
        "noImplicitAny": true,
        // Запрещает использование null и undefined без явного указания в типах.
        "strictNullChecks": true,
        // Улучшает проверку типов для функций.
        "strictFunctionTypes": true,
        // Запрещает неявное использование this без контекста.
        "noImplicitThis": true,
        // Показывает ошибку, если переменная объявлена, но не используется.
        "noUnusedLocals": true,
        // Показывает ошибку, если параметр функции объявлен, но не используется.
        "noUnusedParameters": true,
        // Запрещает пропуск break в switch.
        "noFallthroughCasesInSwitch": true,

        //? Работа с файлами
        // Запрещает компилировать .js файлы (если true, TypeScript сможет работать и с JavaScript).
        "allowJs": true,
        // Если true, TypeScript проверяет типы в .js файлах.
        "checkJs": false,

        //? Настройки вывода
        // Указывает папку для скомпилированных файлов (.js и .d.ts). "dist"
        "outDir": "./dist",
        // Указывает корневую папку исходных файлов. "src"
        "rootDir": "./src",

        //? Разрешение модулей
        // Базовый путь для модулей. "./"
        "baseUrl": "./src",
        // Позволяет использовать алиасы для импортов (например, @components/Button вместо ../../components/Button).
        "paths": {
            "@/*": ["./*"],
            "@/assets": ["assets/*"],
            "@/components": ["components/*"],
            "@/models": ["models/*"],
            "@/pages": ["pages/*"],
            "@/plugins": ["plugins/*"],
            "@/scripts": ["scripts/*"],
            "@/libs": ["libs/*"],
            "@/dto": ["dto/*"]
        },

        //? Генерация файлов
        // Позволяет импортировать JSON-файлы.
        "resolveJsonModule": true,
        // Разрешает import x from "module", даже если модуль экспортируется как module.exports.
        "allowSyntheticDefaultImports": true,
        // Генерирует .d.ts файлы (используется для создания библиотек).
        "declaration": true,
        // Создаёт .map файлы, которые помогают отлаживать TypeScript-код в браузере.
        "sourceMap": true,

        // Принудительно распознаёт модули в файлах даже без import/export.
        "moduleDetection": "force",

        // Меняет способ трансляции полей классов в JavaScript. Использует Object.defineProperty() для определения полей классов.
        "useDefineForClassFields": true,

        // Используется для сборки многомодульных проектов (TypeScript Project References).
        // Позволяет использовать этот проект как зависимость в других TypeScript-проектах.
        //! Требует "declaration": true (генерацию .d.ts файлов).
        "composite": true,

        //Указывает папку для файлов деклараций (.d.ts).
        // Вместо того, чтобы генерировать .d.ts рядом с .js, они будут в ./dist/types.
        //! Работает только если declaration: true.
        //"declarationDir": "./dist/types",

        // Позволяет импортировать .ts файлы с расширением (ESM-стиль).
        // Разрешает import "./module.ts" в коде, даже если TypeScript обычно не требует .ts.
        // import { something } from "./utils.ts"; // Без этой опции TypeScript выдаст ошибку
        "allowImportingTsExtensions": false,

        // Запрещает пропуск return в функциях, если они должны что-то возвращать.
        // Показывает ошибку, если в функции не все ветки кода возвращают значение.
        "noImplicitReturns": true,

        // Запрещает TypeScript создавать .js файлы при компиляции. true- не создает
        // TypeScript только проверяет код на ошибки, но НЕ генерирует .js.
        // Полезно, если код компилирует Vite/ESBuild/Webpack.
        "noEmit": false,

        // Гарантирует, что TypeScript-компилятор работает по-файлово, как ESBuild или Babel.
        // Запрещает использовать TypeScript-фичи, которые требуют полного анализа проекта (например, const enum).
        //! Требуется Vite (из-за ESBuild).
        "isolatedModules": true,

        // Пропускает проверку типов в node_modules. (Ускоряет компиляцию, Позволяет избежать ошибок в зависимостях.)
        // import express from "express"; // ❌ Ошибка, если в Express есть несовместимые типы
        "skipLibCheck": true,

        // Гарантирует, что файлы импортируются с правильным регистром.
        // Предотвращает ошибки при сборке в Linux/Mac (где file.ts ≠ File.ts).
        // import { something } from "./Utils.ts"; // ❌ Ошибка, если файл `utils.ts`
        "forceConsistentCasingInFileNames": true
    },

    //? References
    // Используется в больших проектах, где есть несколько независимых модулей.
    // "references": [ { "path": "./packages/core" }, { "path": "./packages/ui" }]
    // Так можно разделить код на модули и компилировать их отдельно.
    "references": [{ "path": "./tsconfig.node.json" }],

    //? Include
    // Включает все файлы в папке src в компиляцию. "src"
    //"include": ["src/**/*.ts"],
    "include": ["src"],

    //? Exclude
    // Исключает файлы из компиляции. "exclude": ["node_modules", "dist"]
    //! исключаем js файлы ❌Cannot write file 'e:/umserv/html2025/eslint.config.js' because it would overwrite input file.ts
    "exclude": ["node_modules", "dist", "sass-build.js", "eslint.config.js"],

    //? Files
    // Если указан, компилирует только перечисленные файлы. "files": ["src/index.ts"]
    //"files": [],

    //? Types
    // Определяет, какие файлы деклараций (.d.ts) TypeScript должен загружать.
    // "vite/client" Это включает глобальные типы Vite, такие как: console.log(import.meta.env.VITE_API_URL);
    // Можно подключить собственные .d.ts файлы: {"compilerOptions": {"types": ["vite/client", "./src/types/global"] } }
    //! Загружает ТОЛЬКО указанные .d.ts файлы (например, vite/client).
    "types": ["vite/client"]
    // Определяет папки, где искать .d.ts файлы (например, node_modules/@types).
    //! Если "types" задан, то "typeRoots" игнорируется.
    //"typeRoots": []

    //? Extends
    // Позволяет наследовать настройки из другого файла.
    //"extends": ""
}