@kkulebaev/tsconfig
v1.0.0
Published
Shared TypeScript config presets for Vue 3 + Vite + vue-tsc projects
Readme
Install
pnpm add -D @kkulebaev/tsconfig typescriptUsage
Корневой tsconfig.json проекта заменяется на:
{
"extends": "@kkulebaev/tsconfig/vue",
"include": ["src/**/*", "env.d.ts"],
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
}
}В локальном tsconfig.json остаются только project-specific поля (paths, baseUrl, types, include, exclude). Все флаги, уже заданные пресетом, удаляются.
Included flags
| Flag | Value | Rationale |
|------|-------|-----------|
| target | ES2023 | Современный JavaScript output; покрывает ES2023-методы (например, Array.prototype.toReversed) |
| module | ESNext | Native ESM-выхлоп для bundler'а Vite — import/export без транспайла в CommonJS, поддержка top-level await и динамического import() как промиса |
| moduleResolution | Bundler | Алгоритм резолва Vite/esbuild — учитывает package.json exports/conditions, поддерживает paths, не требует обязательных расширений в импортах, без legacy node10 fallback'ов. Требует TS 5.0+ |
| lib | ["ES2023","DOM","DOM.Iterable"] | ES2023 — встроенные типы ES2023 (Array.prototype.toReversed/toSorted/with, Symbol.dispose, hashbang grammar). DOM — браузерные API (Document, Element, Window, fetch, localStorage и т.д.). DOM.Iterable — итераторы DOM-коллекций (NodeList[Symbol.iterator], FormData.entries(), Headers.entries(), URLSearchParams.entries()) |
| jsx | preserve | JSX-трансформацию выполняет Vue SFC compiler |
| strict | true | Включает все strict-флаги: noImplicitAny, strictNullChecks, strictFunctionTypes, strictBindCallApply, strictPropertyInitialization, noImplicitThis, useUnknownInCatchVariables, alwaysStrict |
| noFallthroughCasesInSwitch | true | Предотвращает случайные fallthrough в switch-блоках |
| noImplicitReturns | true | Все ветки функции должны возвращать значение (если есть хотя бы один return value). Ловит забытый return в if/else |
| noImplicitOverride | true | Требует override keyword при переопределении методов класса |
| noErrorTruncation | true | TS не обрезает длинные error-сообщения — облегчает дебаг complex generic-типов |
| noUnusedLocals | true | Ошибка на неиспользуемые локальные переменные |
| noUnusedParameters | true | Ошибка на неиспользуемые параметры функций (префикс _ разрешён) |
| noUncheckedIndexedAccess | false | Явно выключен — польза от пометки T \| undefined при индексном доступе сомнительна относительно количества borrow-чек и !-assertion'ов, которые появляются в коде |
| useDefineForClassFields | true | Поля класса инициализируются через Object.defineProperty (ES native) |
| verbatimModuleSyntax | true | Type-only импорты должны быть явные (import type { Foo }) |
| esModuleInterop | true | Runtime-флаг: разрешает default-импорт CommonJS-модулей (import fs from 'fs'). Без него потребовался бы import * as fs from 'fs'. Меняет emitted JS — добавляет helper для unwrap'а default-экспорта |
| allowSyntheticDefaultImports | true | Type-level комплемент esModuleInterop: typecheck не блокирует default-импорт модуля без явного default export. На runtime не влияет, нужен только для согласия компилятора |
| forceConsistentCasingInFileNames | true | Защищает от cross-OS багов с регистром в импортах |
| resolveJsonModule | true | Типизированные импорты .json-файлов |
| isolatedModules | true | Обязательно для single-file transpilation модели Vite (const enum несовместим) |
| skipLibCheck | true | Пропускает type-check .d.ts файлов в node_modules |
| allowImportingTsExtensions | true | Разрешает import './foo.ts' (скрипты, сгенерированный код) |
| noEmit | true | Идёт в паре с предыдущим — tsc только type-check'ает, JS эмитят Vite/esbuild |
Compatibility
Пресет рассчитан на --noEmit stack: JavaScript эмитят Vite/esbuild, vue-tsc используется только для type-check.
- Vue 3 + Vite + vue-tsc: полностью поддержано, battle-tested.
- TypeScript: требуется
>=5.0(peerDependency) —exports-basedextendsresolution и массивныйextendsпоявились в TS 5. - Runtime:
target: ES2023требует Chrome 110+, Safari 16.4+, Node 20+. Vite может занижать черезbuild.targetвvite.config.ts. - Проекты, эмитящие через
tsc: совместимость не гарантируется — требуется явный overridenoEmit: falseи пересмотр каждого флага.
Changelog
См. CHANGELOG.md или GitHub Releases — версии генерируются автоматически через release-please на основе Conventional Commits.
License
MIT © Konstantin Kulebaev
