Конфигурация TypeScript
Этот документ предоставляет подробное объяснение конфигурации TypeScript в@ui8kit/core, охватывая настройки компиляции, генерацию типов, псевдонимы путей и разрешение модулей. Конфигурация определена в tsconfig.json1-26 и интегрирована с системой сборки, описанной в Система сборки.
Для информации об артефактах дистрибуции, генерируемых компиляцией TypeScript, см. Структура пакета. Для деталей о том, как типы используются в API компонентов, см. Справочник API.
Обзор конфигурации
Конфигурация TypeScript выполняет три основные функции: компиляция исходного кода изsrc/ в модули ES2022 в dist/, генерация файлов объявлений типов (.d.ts) для автодополнения в IDE и проверки типов, а также установка псевдонимов путей для чистых импортов.
Диаграмма: Конвейер компиляции TypeScript
Настройки целевой компиляции
Конфигурация нацелена на современные JavaScript-окружения с выводом ES2022, избегая транспиляции последних возможностей языка при сохранении широкой совместимости. Таблица настроек компиляции| Настройка | Значение | Назначение | Ссылка на строку |
|---|---|---|---|
target | ES2022 | Компиляция в синтаксис ECMAScript 2022 | tsconfig.json5 |
module | ES2022 | Использование системы модулей ES2022 | tsconfig.json6 |
lib | ["DOM", "ESNext", "ES2022"] | Включение API DOM и последних возможностей JavaScript | tsconfig.json14 |
jsx | react-jsx | Использование автоматического JSX runtime React 17+ | tsconfig.json15 |
moduleResolution | Bundler | Современное разрешение, совместимое с бандлерами | tsconfig.json7 |
Target: ES2022
Настройкаtarget: "ES2022" tsconfig.json5 компилирует TypeScript в ECMAScript 2022, который включает:
- Top-level await
- Поля классов и приватные методы
- Блоки статической инициализации
- Свойство error cause
- Метод
at()для массивов
Система модулей: ES2022
Настройкаmodule: "ES2022" tsconfig.json6 генерирует ES-модули с расширениями .js, обеспечивая tree-shaking в приложениях потребителей. Это согласуется с объявлением "type": "module" в package.json8
Разрешение модулей: Bundler
НастройкаmoduleResolution: "Bundler" tsconfig.json7 использует специфичное для бандлеров разрешение, которое поддерживает:
- Импорты без расширений (
import { Button } from "./Button") - Разрешение поля exports пакетов
- Условный экспорт для различных окружений
- Паттерны подпутей
Конфигурация системы типов
Конфигурация включает все опции строгой проверки типов и генерирует файлы объявлений для интеграции с IDE. Таблица настроек системы типов| Настройка | Значение | Назначение | Ссылка на строку |
|---|---|---|---|
strict | true | Включение всех строгих проверок типов | tsconfig.json8 |
declaration | true | Генерация объявлений типов .d.ts | tsconfig.json17 |
declarationDir | ./dist | Выходная директория для определений типов | tsconfig.json18 |
composite | true | Включение ссылок на проекты | tsconfig.json16 |
skipLibCheck | true | Пропуск проверки типов файлов объявлений | tsconfig.json10 |
esModuleInterop | true | Включение совместимости модулей CommonJS/ES | tsconfig.json9 |
Строгий режим
Флагstrict: true tsconfig.json8 включает все опции строгой проверки типов:
strictNullChecks: Null и undefined не присваиваются другим типамstrictFunctionTypes: Параметры функций проверяются контравариантноstrictBindCallApply: Проверка типов методовbind,callиapplystrictPropertyInitialization: Свойства классов должны быть инициализированыnoImplicitAny: Переменные должны иметь явные типыnoImplicitThis: Выраженияthisтребуют явного типаalwaysStrict: Разбор в строгом режиме и вывод"use strict"
Генерация объявлений
Настройкаdeclaration: true tsconfig.json17 генерирует файлы .d.ts вместе со скомпилированным JavaScript. Эти определения типов:
- Обеспечивают автодополнение в IDE для всех экспортируемых компонентов
- Предоставляют встроенную документацию из комментариев JSDoc
- Поддерживают проверку типов в TypeScript-проектах потребителей
- Поддерживают запись
"types": "./dist/index.d.ts"в package.json32
Составные проекты
Флагcomposite: true tsconfig.json16 включает ссылки на проекты TypeScript, что:
- Позволяет выполнять более быстрые инкрементальные сборки
- Обеспечивает графы зависимостей между проектами TypeScript
- Поддерживает архитектуры monorepo, описанные в SUBMODULE_GUIDE.md
Конфигурация псевдонимов путей
Псевдонимы путей обеспечивают чистые импорты с использованием префикса@/ и ссылки на пакет @ui8kit/core.
Настройки псевдонимов путей
Базовый URL
НастройкаbaseUrl: "." tsconfig.json20 устанавливает корень проекта как базу для всех неотносительных импортов. Это обеспечивает разрешение путей относительно корня репозитория.
Сопоставления путей
Объектpaths tsconfig.json21-24 определяет два паттерна псевдонимов:
Таблица псевдонимов
| Паттерн псевдонима | Разрешается в | Пример использования | Назначение |
|---|---|---|---|
@/* | ./src/* | import { Button } from "@/components/ui/Button" | Внутренние импорты исходников |
@ui8kit/core | ./src/index | import { Button } from "@ui8kit/core" | Главная точка входа пакета |
Внутренние импорты: @/*
Псевдоним @/* сопоставляется с ./src/* tsconfig.json22 обеспечивая импорты вида:
import { Block } from "@/core/ui/Block"import { spacingVariants } from "@/core/variants/spacing"import { ThemeProvider } from "@/themes/providers/ThemeProvider"
../../../core/ui/Block) и делает рефакторинг более безопасным.
Точка входа пакета: @ui8kit/core
Псевдоним @ui8kit/core сопоставляется с ./src/index tsconfig.json23 позволяя внутренним файлам импортировать из пакета так же, как это делали бы потребители. Это полезно в:
- Примерах кода и документации
- Тестировании композиции компонентов
- Проверке публичной поверхности API
Конфигурация выходных данных сборки
Конфигурация контролирует, куда записываются скомпилированные файлы и определения типов. Таблица настроек вывода| Настройка | Значение | Назначение | Ссылка на строку |
|---|---|---|---|
rootDir | src | Корень директории исходников | tsconfig.json13 |
outDir | ./dist | Вывод скомпилированного JavaScript | tsconfig.json19 |
declarationDir | ./dist | Вывод определений типов | tsconfig.json18 |
Корневая директория
НастройкаrootDir: "src" tsconfig.json13 устанавливает src/ как корень для компиляции. Это обеспечивает соответствие структуры выходной директории исходной:
Выходная директория
НастройкаoutDir: "./dist" tsconfig.json19 записывает скомпилированный JavaScript в dist/. Эта директория:
- Включена в NPM-пакет через
"files": ["dist/**/*"]в package.json39-43 - Указана в
"main": "./dist/index.js"в package.json31 - Исключена из системы контроля версий через
.gitignore - Генерируется скриптом
npm run buildв package.json22
Директория объявлений
НастройкаdeclarationDir: "./dist" tsconfig.json18 записывает файлы .d.ts рядом с файлами .js в той же структуре директорий. Такое размещение:
- Упрощает распространение пакета (одна папка
dist/) - Соответствует ожиданиям потребителей относительно расположения типов
- Обеспечивает запись
"types": "./dist/index.d.ts"в package.json32
Шаблоны включения и исключения
Конфигурация указывает, какие файлы компилировать, а какие игнорировать. Настройки шаблонов файловШаблон включения
Настройкаinclude: ["./src"] tsconfig.json2 компилирует все файлы TypeScript в директории src/:
src/**/*.ts- Все файлы TypeScriptsrc/**/*.tsx- Все файлы React-компонентовsrc/**/*.json- JSON-модули (черезresolveJsonModule: true)
- Базовые примитивы в
src/core/ui/ - Определения вариантов в
src/core/variants/ - UI-компоненты в
src/components/ui/ - Шаблоны макетов в
src/layouts/ - Систему тем в
src/themes/ - Метаданные реестра в
src/registry.json
Шаблон исключения
Настройкаexclude: ["./lib", "./dist"] tsconfig.json3 предотвращает компиляцию:
./lib/- Сгенерированные артефакты, такие какcore-classes.json, описанные в Система сборки./dist/- Ранее скомпилированный вывод для избежания рекурсивной компиляции
Специальные опции компилятора
Несколько дополнительных опций настраивают поведение TypeScript для конкретных случаев использования. Таблица специальных опций| Настройка | Значение | Назначение | Ссылка на строку |
|---|---|---|---|
types | ["bun-types"] | Включение типов среды выполнения Bun | tsconfig.json11 |
resolveJsonModule | true | Разрешение импорта JSON-файлов | tsconfig.json12 |
esModuleInterop | true | Включение совместимости с CommonJS | tsconfig.json9 |
skipLibCheck | true | Пропуск проверки типов библиотек | tsconfig.json10 |
sideEffects | false (package.json) | Включение tree-shaking | package.json30 |
Типы среды выполнения Bun
Настройкаtypes: ["bun-types"] tsconfig.json11 включает определения типов для среды выполнения Bun. Это обеспечивает:
- Проверку типов для специфичных API Bun
- Поддержку команд
bunв скриптах, таких какbunx buildy-ui@latest scanв package.json26 - Разработку с быстрым транспилятором TypeScript от Bun
bun-types объявлена в package.json62
Разрешение JSON-модулей
НастройкаresolveJsonModule: true tsconfig.json12 позволяет импортировать JSON-файлы как типизированные модули:
src/registry.json во всей кодовой базе, как описано в Реестр компонентов.
Совместимость с CommonJS
НастройкаesModuleInterop: true tsconfig.json9 обеспечивает беспрепятственный импорт модулей CommonJS в синтаксисе ES-модулей:
class-variance-authority и clsx, объявленными в package.json48-53
Проверка типов библиотек
НастройкаskipLibCheck: true tsconfig.json10 пропускает проверку типов файлов .d.ts в node_modules/. Это:
- Значительно ускоряет компиляцию
- Избегает ошибок от несовместимых типов библиотек
- Фокусирует проверку типов на исходном коде проекта
Интеграция со скриптами сборки
Конфигурация TypeScript интегрируется с несколькими скриптами сборки, определенными вpackage.json.
Диаграмма интеграции скриптов сборки
Скрипт сборки
Командаnpm run build package.json22 выполняет:
- Читает все настройки из
tsconfig.json - Компилирует
src/**/*.tsиsrc/**/*.tsxвdist/ - Генерирует определения типов
.d.tsвdist/ - Применяет преобразования псевдонимов путей
- Включает строгую проверку типов
- Завершается с кодом 1, если обнаружены какие-либо ошибки типов
Скрипт проверки типов
Командаnpm run type-check package.json23 выполняет:
--noEmit:
- Выполняет полную проверку типов без генерации файлов
- Проверяет типы в локальной разработке
- Работает быстрее, чем полная компиляция
- Полезен в CI/CD конвейерах перед развертыванием
Интеграция скрипта линтинга
Командаnpm run lint package.json24 запускает ESLint на файлах TypeScript:
- Понимание псевдонимов путей, определенных в
tsconfig.json - Разбор синтаксиса TypeScript (расширения
.ts,.tsx) - Доступ к информации о типах для продвинутых правил линтинга
npm run lint:fix package.json25 автоматически исправляет исправимые проблемы.
Источники: package.json22-25 tsconfig.json1-26
Резюме
Конфигурация TypeScript в@ui8kit/core устанавливает современный, типобезопасный конвейер сборки:
- Цель компиляции: Модули ES2022 с разрешением, дружественным к бандлерам
- Генерация типов: Полные файлы объявлений (
.d.ts) для интеграции с IDE - Строгая проверка: Все опции строгого режима включены для безопасности типов
- Псевдонимы путей:
@/*для внутренних импортов,@ui8kit/coreдля ссылки на пакет - Структура вывода: Директория
dist/, отражающая структуруsrc/ - Поддержка JSON: Импорт метаданных реестра как типизированных модулей
- Интеграция сборки: Скрипты для компиляции, проверки типов и линтинга