Skip to main content

Конфигурация TypeScript

Этот документ предоставляет подробное объяснение конфигурации TypeScript в @ui8kit/core, охватывая настройки компиляции, генерацию типов, псевдонимы путей и разрешение модулей. Конфигурация определена в tsconfig.json1-26 и интегрирована с системой сборки, описанной в Система сборки. Для информации об артефактах дистрибуции, генерируемых компиляцией TypeScript, см. Структура пакета. Для деталей о том, как типы используются в API компонентов, см. Справочник API.

Обзор конфигурации

Конфигурация TypeScript выполняет три основные функции: компиляция исходного кода из src/ в модули ES2022 в dist/, генерация файлов объявлений типов (.d.ts) для автодополнения в IDE и проверки типов, а также установка псевдонимов путей для чистых импортов. Диаграмма: Конвейер компиляции TypeScript
Источники: tsconfig.json1-26 package.json22-25

Настройки целевой компиляции

Конфигурация нацелена на современные JavaScript-окружения с выводом ES2022, избегая транспиляции последних возможностей языка при сохранении широкой совместимости. Таблица настроек компиляции

Target: ES2022

Настройка target: "ES2022" tsconfig.json5 компилирует TypeScript в ECMAScript 2022, который включает:
  • Top-level await
  • Поля классов и приватные методы
  • Блоки статической инициализации
  • Свойство error cause
  • Метод at() для массивов
Это предполагает, что потребители используют современные браузеры или окружения Node.js 16+.

Система модулей: ES2022

Настройка module: "ES2022" tsconfig.json6 генерирует ES-модули с расширениями .js, обеспечивая tree-shaking в приложениях потребителей. Это согласуется с объявлением "type": "module" в package.json8

Разрешение модулей: Bundler

Настройка moduleResolution: "Bundler" tsconfig.json7 использует специфичное для бандлеров разрешение, которое поддерживает:
  • Импорты без расширений (import { Button } from "./Button")
  • Разрешение поля exports пакетов
  • Условный экспорт для различных окружений
  • Паттерны подпутей
Это беспрепятственно работает с современными бандлерами, такими как Vite, Webpack 5 и esbuild. Источники: tsconfig.json5-7 tsconfig.json14-15 package.json8

Конфигурация системы типов

Конфигурация включает все опции строгой проверки типов и генерирует файлы объявлений для интеграции с IDE. Таблица настроек системы типов

Строгий режим

Флаг strict: true tsconfig.json8 включает все опции строгой проверки типов:
  • strictNullChecks: Null и undefined не присваиваются другим типам
  • strictFunctionTypes: Параметры функций проверяются контравариантно
  • strictBindCallApply: Проверка типов методов bind, call и apply
  • strictPropertyInitialization: Свойства классов должны быть инициализированы
  • 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
Источники: tsconfig.json8-10 tsconfig.json16-18 package.json32

Конфигурация псевдонимов путей

Псевдонимы путей обеспечивают чистые импорты с использованием префикса @/ и ссылки на пакет @ui8kit/core. Настройки псевдонимов путей

Базовый URL

Настройка baseUrl: "." tsconfig.json20 устанавливает корень проекта как базу для всех неотносительных импортов. Это обеспечивает разрешение путей относительно корня репозитория.

Сопоставления путей

Объект paths tsconfig.json21-24 определяет два паттерна псевдонимов: Таблица псевдонимов

Внутренние импорты: @/*

Псевдоним @/* сопоставляется с ./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
Диаграмма: Поток разрешения путей
Источники: tsconfig.json20-24

Конфигурация выходных данных сборки

Конфигурация контролирует, куда записываются скомпилированные файлы и определения типов. Таблица настроек вывода

Корневая директория

Настройка 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
Источники: tsconfig.json13 tsconfig.json18-19 package.json31-32 package.json39-43

Шаблоны включения и исключения

Конфигурация указывает, какие файлы компилировать, а какие игнорировать. Настройки шаблонов файлов

Шаблон включения

Настройка include: ["./src"] tsconfig.json2 компилирует все файлы TypeScript в директории src/:
  • src/**/*.ts - Все файлы TypeScript
  • src/**/*.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/ - Ранее скомпилированный вывод для избежания рекурсивной компиляции
Источники: tsconfig.json2-3

Специальные опции компилятора

Несколько дополнительных опций настраивают поведение TypeScript для конкретных случаев использования. Таблица специальных опций

Типы среды выполнения 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/. Это:
  • Значительно ускоряет компиляцию
  • Избегает ошибок от несовместимых типов библиотек
  • Фокусирует проверку типов на исходном коде проекта
Библиотека объявляет peer-зависимости для React 18/19 в package.json55-58 полагаясь на проекты потребителей для предоставления совместимых версий. Источники: tsconfig.json9-12 package.json30 package.json48-53 package.json55-58 package.json62

Интеграция со скриптами сборки

Конфигурация TypeScript интегрируется с несколькими скриптами сборки, определенными в package.json. Диаграмма интеграции скриптов сборки

Скрипт сборки

Команда npm run build package.json22 выполняет:
Это:
  1. Читает все настройки из tsconfig.json
  2. Компилирует src/**/*.ts и src/**/*.tsx в dist/
  3. Генерирует определения типов .d.ts в dist/
  4. Применяет преобразования псевдонимов путей
  5. Включает строгую проверку типов
  6. Завершается с кодом 1, если обнаружены какие-либо ошибки типов
Вывод используется для распространения NPM-пакета, описанного в Структура пакета.

Скрипт проверки типов

Команда npm run type-check package.json23 выполняет:
Флаг --noEmit:
  • Выполняет полную проверку типов без генерации файлов
  • Проверяет типы в локальной разработке
  • Работает быстрее, чем полная компиляция
  • Полезен в CI/CD конвейерах перед развертыванием
Этот скрипт проверяет безопасность типов без накладных расходов на генерацию JavaScript.

Интеграция скрипта линтинга

Команда npm run lint package.json24 запускает ESLint на файлах TypeScript:
ESLint учитывает конфигурацию TypeScript через:
  • Понимание псевдонимов путей, определенных в tsconfig.json
  • Разбор синтаксиса TypeScript (расширения .ts, .tsx)
  • Доступ к информации о типах для продвинутых правил линтинга
Вариант npm run lint:fix package.json25 автоматически исправляет исправимые проблемы. Источники: package.json22-25 tsconfig.json1-26

Резюме

Конфигурация TypeScript в @ui8kit/core устанавливает современный, типобезопасный конвейер сборки:
  1. Цель компиляции: Модули ES2022 с разрешением, дружественным к бандлерам
  2. Генерация типов: Полные файлы объявлений (.d.ts) для интеграции с IDE
  3. Строгая проверка: Все опции строгого режима включены для безопасности типов
  4. Псевдонимы путей: @/* для внутренних импортов, @ui8kit/core для ссылки на пакет
  5. Структура вывода: Директория dist/, отражающая структуру src/
  6. Поддержка JSON: Импорт метаданных реестра как типизированных модулей
  7. Интеграция сборки: Скрипты для компиляции, проверки типов и линтинга
Эта конфигурация поддерживает трехслойную архитектуру, описанную в Архитектура, при этом обеспечивая множество методов распространения, описанных в Структура пакета. Источники: tsconfig.json1-26 package.json22-25 package.json30-43