constants —— константы
Каталог src/constants/ — единый источник runtime-констант для всего семейства: семантические цвета типов компонентов, размерные шаги, коды языков. Всё заморожено через as const и используется для вывода объединённых типов в core/shared/types (см. core/types).
Способ импорта
Заголовок раздела «Способ импорта»import { LH_TYPES_CONST, LH_SIZE_CONST, LH_LANGUAGE_CONST, LH_SIZE_DEFAULT, LH_LANGUAGE_DEFAULT,} from '@lh-ui/share/constants'Таблица констант
Заголовок раздела «Таблица констант»| Константа | Значение | Назначение |
|---|---|---|
LH_TYPES_CONST |
{ success, warning, error, info, danger } |
Типы компонентов (пять семантических цветов) |
LH_SIZE_CONST |
{ small, medium, large, mini, old: 'x-large' } |
Размерные шаги компонентов |
LH_SIZE_DEFAULT |
'medium' (= LH_SIZE_CONST.medium) |
Размер по умолчанию |
LH_LANGUAGE_CONST |
{ zhCN: 'zh-CN', enUS: 'en-US', jaJP: 'ja-JP', koKR: 'ko-KR', deDE: 'de-DE', frFR: 'fr-FR' } |
Коды языков |
LH_LANGUAGE_DEFAULT |
'zh-CN' (= LH_LANGUAGE_CONST.zhCN) |
Язык по умолчанию |
LH_TYPES_CONST —— пять семантических цветов
Заголовок раздела «LH_TYPES_CONST —— пять семантических цветов»export const LH_TYPES_CONST = { success: 'success', // успех warning: 'warning', // предупреждение error: 'error', // ошибка info: 'info', // информация danger: 'danger', // опасность} as constУ каждого члена есть JSDoc @alias (успех / предупреждение / ошибка / информация / опасность), дающий подсказку при наведении. LhComponentType на этой основе дополнительно включает 'default' | 'primary' (базовые цвета внешнего вида, а не семантика состояний).
Разница между error и danger
Заголовок раздела «Разница между error и danger»Оба относятся к красным цветам «что-то пошло не так», но семантически разделены; каждый компонент может выбирать сам:
error— неудачная валидация (красная рамка input в форме), неудачная операция (ошибка загрузки).danger— деструктивные операции (красное выделение кнопки удаления).
Это договорённость, а не строгое правило; большинство компонентов использует только что-то одно — ориентируйтесь на документацию конкретного компонента.
LH_SIZE_CONST —— пять размеров
Заголовок раздела «LH_SIZE_CONST —— пять размеров»export const LH_SIZE_CONST = { small: 'small', medium: 'medium', // по умолчанию large: 'large', mini: 'mini', // компактные inline-сценарии (кнопки действий в таблице) old: 'x-large', // для пожилых пользователей} as constИмя ключа old не совпадает со значением 'x-large'
Заголовок раздела «Имя ключа old не совпадает со значением 'x-large'»Это осознанный компромисс в именовании:
- Имя ключа
old— внутренний семантический идентификатор «режима для пожилых»; переключатель —LhBaseProps.old?: boolean. - Значение
'x-large'— внешнее значение перечисления размеров; именно оно входит в объединениеLhComponentSize.
Снаружи пользователь видит size="x-large" (или переключатель-проп old), а имя внутренней константы ему не открывается. При написании кода учитывайте: Object.keys(LH_SIZE_CONST) возвращает ключи, а Object.values(...) — значения перечисления типов; не смешивайте их.
Назначение каждого размера
Заголовок раздела «Назначение каждого размера»| Размер | Сценарий |
|---|---|
mini |
Кнопки действий внутри строк таблицы, плотные формы |
small |
Компактные раскладки, тулбары |
medium |
По умолчанию; обычные формы и области контента |
large |
Главная кнопка на отдельной странице регистрации / входа |
x-large |
Режим доступности для пожилых: крупные шрифты, крупные зоны касания; включается вместе с логическим переключателем old |
Не все компоненты поддерживают все пять размеров: mini / x-large реализованы лишь на части компонентов — ориентируйтесь на документацию конкретного компонента.
LH_LANGUAGE_CONST —— шесть языков
Заголовок раздела «LH_LANGUAGE_CONST —— шесть языков»export const LH_LANGUAGE_CONST = { zhCN: 'zh-CN', enUS: 'en-US', jaJP: 'ja-JP', koKR: 'ko-KR', deDE: 'de-DE', frFR: 'fr-FR',} as constИмена ключей — стандартные имена locale вроде zhCN / enUS, значения — коды языков BCP 47. LhLocaleType и LhComponentLanguage выводятся отсюда.
Обратите внимание на статус готовности языковых файлов: ja-JP / ko-KR / de-DE / fr-FR сейчас являются зарезервированными скелетами с fallback-переводом на английский (см. locales). Того, что язык зарегистрирован в константах, ещё не достаточно — тексты могут быть не готовы.
Почему константы, а не enum
Заголовок раздела «Почему константы, а не enum»Объекты as const + вывод объединённых типов дают три преимущества над TS enum:
- Нулевые runtime-расходы:
enumпорождает дополнительный код (обратное отображение), а объектas constсуществует в одном экземпляре. - Обходимы:
Object.values(LH_TYPES_CONST)сразу даёт все значения перечисления для runtime-проверки; обходenumпри выключенномpreserveConstEnumsненадёжен. - JSDoc на каждый член: подсказки
@aliasкаждого члена видны в IDE.
Примеры использования
Заголовок раздела «Примеры использования»Значения по умолчанию для пропов компонентов
Заголовок раздела «Значения по умолчанию для пропов компонентов»import { LH_SIZE_DEFAULT } from '@lh-ui/share/constants'
props: { size: { type: String, default: LH_SIZE_DEFAULT }, // 'medium'}Runtime-проверка значений
Заголовок раздела «Runtime-проверка значений»const TYPE_VALUES = Object.values(LH_TYPES_CONST)
const isValidType = (v: string): v is LhComponentType => TYPE_VALUES.includes(v as never) || v === 'default' || v === 'primary'Обход для генерации вспомогательных функций
Заголовок раздела «Обход для генерации вспомогательных функций»// На страницах theme / docs обходятся все языки для генерации списка переключенияObject.entries(LH_LANGUAGE_CONST).forEach(([key, code]) => { // key: 'zhCN' code: 'zh-CN'})Примечания
Заголовок раздела «Примечания»- Константы заморожены:
as constделает тип объединением литералов, но в runtime это обычный объект (безObject.freeze) — не изменяйте его в runtime: вывод типов у downstream от этого не изменится. LH_SIZE_DEFAULT/LH_LANGUAGE_DEFAULTссылаются на члены констант, а не являются независимыми литералами — при изменении константы значение по умолчанию меняется автоматически.- Ключ
oldне следует открывать пользователям напрямую: снаружи доступныsize="x-large"или логический переключательold.
Copyright © 2024-2026 FengMo WenXue