Skip to content

Repository files navigation

████████╗███████╗ ██████╗ ██████╗ ███╗   ██╗███████╗██╗ ██████╗ 
╚══██╔══╝██╔════╝██╔════╝██╔═══██╗████╗  ██║██╔════╝██║██╔════╝ 
   ██║   ███████╗██║     ██║   ██║██╔██╗ ██║█████╗  ██║██║  ███╗
   ██║   ╚════██║██║     ██║   ██║██║╚██╗██║██╔══╝  ██║██║   ██║
   ██║   ███████║╚██████╗╚██████╔╝██║ ╚████║██║     ██║╚██████╔╝
   ╚═╝   ╚══════╝ ╚═════╝ ╚═════╝ ╚═╝  ╚═══╝╚═╝     ╚═╝ ╚═════╝ 

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

About

Zero-config TypeScript preset for Vue 3 + Vite + vue-tsc

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors