████████╗███████╗ ██████╗ ██████╗ ███╗ ██╗███████╗██╗ ██████╗ ╚══██╔══╝██╔════╝██╔════╝██╔═══██╗████╗ ██║██╔════╝██║██╔════╝ ██║ ███████╗██║ ██║ ██║██╔██╗ ██║█████╗ ██║██║ ███╗ ██║ ╚════██║██║ ██║ ██║██║╚██╗██║██╔══╝ ██║██║ ██║ ██║ ███████║╚██████╗╚██████╔╝██║ ╚████║██║ ██║╚██████╔╝ ╚═╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═════╝
Zero-config TypeScript preset для Vue 3 + Vite + vue-tsc — одна строка extends, двадцать три аудированных compilerOptions.
pnpm add -D @kkulebaev/tsconfig typescriptКорневой tsconfig.json проекта заменяется на:
{
"extends": "@kkulebaev/tsconfig/vue",
"include": ["src/**/*", "env.d.ts"],
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
}
}В локальном tsconfig.json остаются только project-specific поля (paths, baseUrl, types, include, exclude). Все флаги, уже заданные пресетом, удаляются.
| 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 |
Пресет рассчитан на --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.md или GitHub Releases — версии генерируются автоматически через release-please на основе Conventional Commits.
MIT © Konstantin Kulebaev