Перейти к содержимому

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) Язык по умолчанию
export const LH_TYPES_CONST = {
success: 'success', // успех
warning: 'warning', // предупреждение
error: 'error', // ошибка
info: 'info', // информация
danger: 'danger', // опасность
} as const

У каждого члена есть JSDoc @alias (успех / предупреждение / ошибка / информация / опасность), дающий подсказку при наведении. LhComponentType на этой основе дополнительно включает 'default' | 'primary' (базовые цвета внешнего вида, а не семантика состояний).

Оба относятся к красным цветам «что-то пошло не так», но семантически разделены; каждый компонент может выбирать сам:

  • error — неудачная валидация (красная рамка input в форме), неудачная операция (ошибка загрузки).
  • danger — деструктивные операции (красное выделение кнопки удаления).

Это договорённость, а не строгое правило; большинство компонентов использует только что-то одно — ориентируйтесь на документацию конкретного компонента.

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 реализованы лишь на части компонентов — ориентируйтесь на документацию конкретного компонента.

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). Того, что язык зарегистрирован в константах, ещё не достаточно — тексты могут быть не готовы.

Объекты as const + вывод объединённых типов дают три преимущества над TS enum:

  1. Нулевые runtime-расходы: enum порождает дополнительный код (обратное отображение), а объект as const существует в одном экземпляре.
  2. Обходимы: Object.values(LH_TYPES_CONST) сразу даёт все значения перечисления для runtime-проверки; обход enum при выключенном preserveConstEnums ненадёжен.
  3. JSDoc на каждый член: подсказки @alias каждого члена видны в IDE.

Значения по умолчанию для пропов компонентов

Заголовок раздела «Значения по умолчанию для пропов компонентов»
import { LH_SIZE_DEFAULT } from '@lh-ui/share/constants'
props: {
size: { type: String, default: LH_SIZE_DEFAULT }, // 'medium'
}
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