TypeScript является встроенной частью экосистемы Vite и обрабатывается на уровне инструментов сборки без необходимости подключения дополнительных компиляторов или сложной конфигурации. Основной подход Vite заключается в том, чтобы рассматривать TypeScript не как отдельный этап сборки, а как расширение стандартного JavaScript-пайплайна, где типизация удаляется во время трансформации модулей, а не через полноценную компиляцию всего проекта.
Vite не выполняет полную типизацию кода во время разработки. Вместо этого используется стратегия трансформации, при которой TypeScript-код преобразуется в JavaScript с удалением типов.
Ключевой момент:
Это означает, что такие конструкции как интерфейсы, типы, generics полностью исчезают на этапе обработки, но при этом не влияют на выполнение кода.
interface User {
id: number;
name: string;
}
const user: User = {
id: 1,
name: 'Alex'
};
После обработки в Vite:
const user = {
id: 1,
name: 'Alex'
};
Типы удаляются, но структура кода остаётся неизменной.
Vite не требует обязательного наличия tsconfig.json для
запуска проекта. Однако при его отсутствии TypeScript-функциональность
будет ограничена только трансформацией синтаксиса без учёта
пользовательских правил компиляции.
При наличии tsconfig.json Vite автоматически его
считывает и использует как источник конфигурации для:
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"strict": true,
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
}
}
Vite интегрирует эти параметры в систему резолвинга модулей без необходимости дополнительных плагинов.
В основе обработки TypeScript в Vite лежит esbuild. Он используется как сверхбыстрый трансформер, написанный на Go, и отвечает за:
esbuild не выполняет проверку типов, что принципиально важно для архитектуры Vite.
Так как Vite не выполняет type-checking, проверка типов отделяется от процесса сборки. Обычно она выполняется через стандартный компилятор TypeScript:
tsc --noEmit
Этот режим используется только для анализа типов без генерации файлов. Такой подход позволяет:
Vite автоматически поддерживает файлы с расширениями:
.ts.tsxбез необходимости регистрации дополнительных загрузчиков.
Пример компонента React в TypeScript:
type Props = {
title: string;
};
export function Header({ title }: Props) {
return <h1>{title}</h1>;
}
Такие файлы обрабатываются напрямую через встроенный pipeline Vite и esbuild.
Vite поддерживает резолвинг модулей без указания расширений, что распространяется и на TypeScript:
import { utils } from './utils';
Файл utils.ts будет автоматически найден и
обработан.
Это возможно благодаря встроенной системе module resolution, которая учитывает:
.ts.tsx.js.jsxindex.tsVite работает поверх нативных ES-модулей, поэтому TypeScript рассматривается как промежуточный формат, совместимый с ESM.
Особенности:
import/export остаются неизменнымиexport const sum = (a: number, b: number): number => {
return a + b;
};
После трансформации сохраняется идентичная структура ESM.
Vite синхронизирует алиасы из tsconfig.json с
собственной системой резолвинга. Это позволяет использовать единый
источник конфигурации для редактора и сборщика.
import { api } from '@/api/client';
При этом:
@/api соответствует src/apiНесмотря на удобство, встроенная поддержка имеет ряд архитектурных ограничений:
Vite сознательно отделяет трансформацию от статического анализа.
TSX поддерживается на уровне esbuild без дополнительной конфигурации.
const Button = ({ label }: { label: string }) => {
return <button>{label}</button>;
};
JSX трансформация выполняется автоматически, с учётом настроек среды React или других JSX-фреймворков.
Встроенная поддержка TypeScript в Vite основана на принципах:
Такой подход делает TypeScript в Vite не отдельной системой компиляции, а естественным расширением JavaScript-пайплайна, ориентированным на скорость разработки и упрощение инфраструктуры проекта.