@kkulebaev/tsconfig

Shared TypeScript config presets for Vue 3 + Vite + vue-tsc projects
1,703
Install
npm install @kkulebaev/tsconfig
Latest Version:1.0.0
License:MIT
Last Updated:Oct 10, 2026
Links: GitHub  ·  npm
Maintainer: kkulebaev
████████╗███████╗ ██████╗ ██████╗ ███╗   ██╗███████╗██╗ ██████╗ 
╚══██╔══╝██╔════╝██╔════╝██╔═══██╗████╗  ██║██╔════╝██║██╔════╝ 
   ██║   ███████╗██║     ██║   ██║██╔██╗ ██║█████╗  ██║██║  ███╗
   ██║   ╚════██║██║     ██║   ██║██║╚██╗██║██╔══╝  ██║██║   ██║
   ██║   ███████║╚██████╗╚██████╔╝██║ ╚████║██║     ██║╚██████╔╝
   ╚═╝   ╚══════╝ ╚═════╝ ╚═════╝ ╚═╝  ╚═══╝╚═╝     ╚═╝ ╚═════╝ 

Zero-config TypeScript preset для Vue 3 + Vite + vue-tsc — одна строка extends, двадцать три аудированных compilerOptions.

npm downloads license publish

stable provenance tree shaking vue3 vite vue-tsc typescript


Install

pnpm add -D @kkulebaev/tsconfig typescript

Usage

Корневой 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-based extends resolution и массивный extends появились в TS 5.
  • Runtime: target: ES2023 требует Chrome 110+, Safari 16.4+, Node 20+. Vite может занижать через build.target в vite.config.ts.
  • Проекты, эмитящие через tsc: совместимость не гарантируется — требуется явный override noEmit: false и пересмотр каждого флага.

Changelog

См. CHANGELOG.md или GitHub Releases — версии генерируются автоматически через release-please на основе Conventional Commits.

License

MIT © Konstantin Kulebaev

Related Packages

@ouuan/tsconfig-vue

ouuan's personal TypeScript config for Vue

4,217 0
@vue/tsconfig

A base TSConfig for working with Vue.js

61,249,993 360
vite-plugin-vue2

Vite plugin for Vue2

1,474,659 618
@vue-vine/vite-plugin

Official Vite plugin for Vue Vine

95,680 1,442
vite-plugin-git-revision

Vite plugin that generates VERSION and COMMITHASH files during build based on a...

21,961 11

Version History

Version Released License
1.0.0 MIT
0.3.0 MIT
0.2.0 MIT
0.1.2 MIT
0.1.1 MIT