Documentation Index
Fetch the complete documentation index at: https://ui8kit.buildy.tw/llms.txt
Use this file to discover all available pages before exploring further.
Конфигурация TypeScript
Этот документ предоставляет подробное объяснение конфигурации TypeScript в @ui8kit/core, охватывая настройки компиляции, генерацию типов, псевдонимы путей и разрешение модулей. Конфигурация определена в tsconfig.json1-26 и интегрирована с системой сборки, описанной в Система сборки.
Для информации об артефактах дистрибуции, генерируемых компиляцией TypeScript, см. Структура пакета. Для деталей о том, как типы используются в API компонентов, см. Справочник API.
Обзор конфигурации
Конфигурация TypeScript выполняет три основные функции: компиляция исходного кода из src/ в модули ES2022 в dist/, генерация файлов объявлений типов (.d.ts) для автодополнения в IDE и проверки типов, а также установка псевдонимов путей для чистых импортов.
Диаграмма: Конвейер компиляции TypeScript
Выходные артефакты
Процесс сборки
Настройки tsconfig.json
Исходные файлы
src/core/ui/*.tsx
Примитивные компоненты
src/components/ui/*.tsx
Составные компоненты
src/layouts/*.tsx
Шаблоны макетов
src/core/variants/*.ts
Определения вариантов CVA
src/themes/**/*.tsx
Система тем
src/index.ts
Главная точка входа
rootDir: 'src'
Корневая директория исходников
outDir: './dist'
Выходная директория
target: 'ES2022'
Версия ECMAScript
module: 'ES2022'
Система модулей
declaration: true
Генерация .d.ts файлов
declarationDir: './dist'
Вывод определений типов
strict: true
Все строгие проверки включены
paths: @/* и @ui8kit/core
Сопоставления псевдонимов путей
tsc -p tsconfig.json
Компилятор TypeScript
tsc --noEmit
Только проверка типов
dist/index.js
Скомпилированный JavaScript
dist/index.d.ts
Определения типов
dist/components/**/*.js
Модули компонентов
dist/components/**/*.d.ts
Типы компонентов
Источники: tsconfig.json1-26 package.json22-25
Настройки целевой компиляции
Конфигурация нацелена на современные 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() для массивов
Это предполагает, что потребители используют современные браузеры или окружения 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 |
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 и 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
Диаграмма: Поток генерации определений типов
Использование потребителем
Сгенерированные артефакты
Обработка компилятором
Исходный TypeScript
*.tsx компоненты
с JSDoc комментариями
*.ts утилиты
с экспортом типов
объявления interface
export type ButtonProps
tsc --declaration
Извлечение информации о типах
Разбор JSDoc комментариев
Конвертация в аннотации типов
dist/**/*.d.ts
Файлы объявлений типов
dist/index.d.ts
Главная точка входа типов
VSCode IntelliSense
Автодополнение свойств
tsc проверка типов
в проектах потребителей
IDE всплывающие подсказки
Показ документации
Составные проекты
Флаг composite: true tsconfig.json16 включает ссылки на проекты TypeScript, что:
- Позволяет выполнять более быстрые инкрементальные сборки
- Обеспечивает графы зависимостей между проектами TypeScript
- Поддерживает архитектуры monorepo, описанные в SUBMODULE_GUIDE.md
Источники: tsconfig.json8-10 tsconfig.json16-18 package.json32
Конфигурация псевдонимов путей
Псевдонимы путей обеспечивают чистые импорты с использованием префикса @/ и ссылки на пакет @ui8kit/core.
Настройки псевдонимов путей
// Из tsconfig.json:20-24
{
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"],
"@ui8kit/core": ["./src/index"]
}
}
Базовый 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
Диаграмма: Поток разрешения путей
Разрешение модулей во время выполнения
Разрешенные пути к файлам
Разрешение путей (tsconfig.json paths)
Операторы импорта
import { Button } from '@/components/ui/Button'
import { Block } from '@/core/ui/Block'
import { spacingVariants } from '@/core/variants/spacing'
import { ThemeProvider } from '@ui8kit/core'
baseUrl: '.'
Ссылка на корень проекта
@/* → ./src/*
Сопоставление внутренних исходников
@ui8kit/core → ./src/index
Точка входа пакета
./src/components/ui/Button.tsx
./src/core/ui/Block.tsx
./src/core/variants/spacing.ts
./src/index.ts
dist/index.js
Скомпилированная точка входа пакета
dist/components/ui/Button.js
Скомпилированный компонент
Источники: tsconfig.json20-24
Конфигурация выходных данных сборки
Конфигурация контролирует, куда записываются скомпилированные файлы и определения типов.
Таблица настроек вывода
| Настройка | Значение | Назначение | Ссылка на строку |
rootDir | src | Корень директории исходников | tsconfig.json13 |
outDir | ./dist | Вывод скомпилированного JavaScript | tsconfig.json19 |
declarationDir | ./dist | Вывод определений типов | tsconfig.json18 |
Корневая директория
Настройка rootDir: "src" tsconfig.json13 устанавливает src/ как корень для компиляции. Это обеспечивает соответствие структуры выходной директории исходной:
src/
├── index.ts → dist/index.js + dist/index.d.ts
├── core/
│ └── ui/
│ └── Block.tsx → dist/core/ui/Block.js + dist/core/ui/Block.d.ts
└── components/
└── ui/
└── Button.tsx → dist/components/ui/Button.js + dist/components/ui/Button.d.ts
Выходная директория
Настройка 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
Шаблоны включения и исключения
Конфигурация указывает, какие файлы компилировать, а какие игнорировать.
Настройки шаблонов файлов
// Из tsconfig.json:2-3
{
"include": ["./src"],
"exclude": ["./lib", "./dist"]
}
Шаблон включения
Настройка 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 для конкретных случаев использования.
Таблица специальных опций
| Настройка | Значение | Назначение | Ссылка на строку |
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-файлы как типизированные модули:
// Импорт метаданных реестра с типами
import registry from "@/registry.json";
// TypeScript выводит тип из структуры JSON
const component = registry.registry.find(c => c.name === "button");
Это используется для импорта src/registry.json во всей кодовой базе, как описано в Реестр компонентов.
Совместимость с CommonJS
Настройка esModuleInterop: true tsconfig.json9 обеспечивает беспрепятственный импорт модулей CommonJS в синтаксисе ES-модулей:
// Работает, даже если пакет использует module.exports
import cva from "class-variance-authority";
Это необходимо для совместимости с зависимостями, такими как 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.
Диаграмма интеграции скриптов сборки
Вывод/Проверка
Примененные настройки tsconfig.json
Режимы компилятора TypeScript
npm скрипты (package.json)
npm run build
tsc -p tsconfig.json
npm run type-check
tsc --noEmit
npm run lint
eslint src --ext .ts,.tsx
npm run lint:fix
eslint src --ext .ts,.tsx --fix
Полная компиляция
Генерация .js + .d.ts
Только проверка типов
Без выходных файлов
Все 20+ настроек
из tsconfig.json
Строгие проверки типов
strict: true
Генерация объявлений
declaration: true
Разрешение путей
@/* и @ui8kit/core
dist/
Скомпилированные модули
Ошибки типов сообщены
Код выхода 1 при ошибке
Ошибки ESLint
Стандарты кодирования
Скрипт сборки
Команда npm run build package.json22 выполняет:
Это:
- Читает все настройки из
tsconfig.json
- Компилирует
src/**/*.ts и src/**/*.tsx в dist/
- Генерирует определения типов
.d.ts в dist/
- Применяет преобразования псевдонимов путей
- Включает строгую проверку типов
- Завершается с кодом 1, если обнаружены какие-либо ошибки типов
Вывод используется для распространения NPM-пакета, описанного в Структура пакета.
Скрипт проверки типов
Команда npm run type-check package.json23 выполняет:
Флаг --noEmit:
- Выполняет полную проверку типов без генерации файлов
- Проверяет типы в локальной разработке
- Работает быстрее, чем полная компиляция
- Полезен в CI/CD конвейерах перед развертыванием
Этот скрипт проверяет безопасность типов без накладных расходов на генерацию JavaScript.
Интеграция скрипта линтинга
Команда npm run lint package.json24 запускает ESLint на файлах TypeScript:
eslint src --ext .ts,.tsx
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: Импорт метаданных реестра как типизированных модулей
- Интеграция сборки: Скрипты для компиляции, проверки типов и линтинга
Эта конфигурация поддерживает трехслойную архитектуру, описанную в Архитектура, при этом обеспечивая множество методов распространения, описанных в Структура пакета.
Источники: tsconfig.json1-26 package.json22-25 package.json30-43