Vite лише прибирає типи - перетворює TypeScript на JavaScript без перевірки. Код з помилкою типу const n: number = 'text' спокійно збереться й запуститься. Це навмисне рішення: перевірка типів - повільна операція, що потребує аналізу всього проєкту, а Vite перетворює файли по одному за мілісекунди.
Розподіл обов'язків:
- редактор (мовний сервер TypeScript, для Vue - розширення Vue - Official) показує помилки під час написання коду;
- окрема команда перевірки - у збірці й CI.
Типова конфігурація package.json:
{
"scripts": {
"dev": "vite",
"build": "tsc --noEmit && vite build",
"typecheck": "tsc --noEmit"
}
}
tsc --noEmit- перевірити типи без генерації файлів;- для Vue -
vue-tsc --noEmit: звичайнийtscне розуміє.vue-файли й не перевіряє шаблони; - для проєкту з кількома
tsconfig(застосунок і конфіги Node) -tsc -b.
Якщо перевірка типів у build надто сповільнює збірку, її виносять в окремий крок CI, що виконується паралельно зі збиранням.
Помилки типів під час розробки в браузері: плагін vite-plugin-checker запускає перевірку в окремому процесі й показує помилки поверх сторінки.
TypeScript 7 змінює баланс. Нативний компілятор перевіряє великий проєкт у 8-12 разів швидше - перевірка в build і в режимі --watch стає майже непомітною. Але TypeScript 7.0 ще не має програмного API, а інструменти, що його використовують (typescript-eslint підтримує лише TypeScript до 6.x, vue-tsc теж працює через API компілятора), потребують TypeScript 6 - тому в проєкті може знадобитися пакет сумісності @typescript/typescript6 поряд із TypeScript 7.
Наслідки «перевірки лише в редакторі»:
- помилки в файлах, які ніхто не відкривав, лишаються непоміченими;
- зміна типу в одному місці ламає десятки інших файлів - редактор покаже це лише у відкритих;
- тому перевірка в CI обов'язкова, навіть якщо в команді всі користуються редактором з підтримкою TypeScript.
Обмеження, що випливають з покофайлового перетворення, - isolatedModules/verbatimModuleSyntax у tsconfig.json, щоб TypeScript попереджав про конструкції, які Vite перетворить неправильно.