Компілятор TypeScript (tsc) працює з .ts і .tsx. Файл .vue для нього - невідомий формат: шаблон, <script setup> з макросами, стилі в одному файлі. Тому для Vue є окремий інструментарій на основі Volar.
Що перевіряє типи:
vue-tsc- обгортка надtsc, що «розуміє» SFC: перевіряє і скрипт, і вирази в шаблоні (props, події, слоти,v-for);- розширення Vue - Official (колишній Volar) для VS Code - те саме в редакторі, плюс автодоповнення в шаблонах. Для інших редакторів - мовний сервер
@vue/language-server.
Чому окремий крок. Vite (і esbuild/Rolldown під ним) лише прибирає типи з коду - не перевіряє. Помилка типу не зупинить npm run dev. Тому перевірку запускають окремо:
"scripts": {
"type-check": "vue-tsc --build",
"build": "vue-tsc --build && vite build"
}
і обов'язково в CI - інакше помилки типів накопичуються непомітно.
Що потрібно в налаштуваннях:
tsconfigз"jsx": "preserve"і модулями для збирача ("moduleResolution": "bundler") -create-vueгенерує це через пакет@vue/tsconfig;- оголошення для імпорту
.vue-файлів у звичайних.tsне потрібне, якщо використовуєтьсяvue-tsc; старийshims-vue.d.tsзdeclare module '*.vue'робить усі компонентиanyі вимикає перевірку props; - типи середовища Vite (
/// <reference types="vite/client" />) дляimport.meta.envта імпорту ассетів.
Перевірка шаблонів - головна цінність:
<OrderCard :order="order" @cancel="onCancel" />
<!-- vue-tsc: Property 'total' is missing / Argument of type 'string' is not assignable to 'number' -->
Помилки на межі компонентів (неправильний prop, неіснуюча подія, слот з іншими параметрами) інакше виявляються лише під час виконання.
Строгість шаблонів регулюється опціями vueCompilerOptions у tsconfig (наприклад, strictTemplates) - у великих проєктах їх вмикають поступово.