Files
svg-sprites/preview/ai/basics/naming.md
S.Gromov e77e7dfcf1 refactor: заменить shiki на самописный highlighter и обновить архитектуру
- Удалён shiki (9.5→0 МБ), создан regex-токенизатор для html/css/xml
- CLI переведён с аргументов на конфиг-файл svg-sprites.config.ts
- Превью переработано: React-приложение вместо инлайн HTML
- Добавлен футер с названием пакета и ссылкой на репозиторий
- Исправлена загрузка dev-data.js для Vite 8
- Футер прижат к низу, содержимое центрировано
2026-04-22 16:54:35 +03:00

4.5 KiB
Raw Blame History

title, scope, keywords, when
title scope keywords when
Именование basics
camelCase
kebab-case
PascalCase
имя файла
имя переменной
имя компонента
имя хука
Создание файлов, переменных, компонентов, хуков — выбор имени

Именование

Этот раздел описывает соглашения об именовании в проекте. Единые правила делают код предсказуемым и упрощают навигацию по проекту.

Базовые правила

Что Рекомендуется
Папки kebab-case
Файлы kebab-case
Переменные camelCase
Константы SCREAMING_SNAKE_CASE
Классы PascalCase
React-компоненты PascalCase
Хуки useSomething
CSS классы camelCase
Ключи enum SCREAMING_SNAKE_CASE

Именование файлов

Суффикс обозначает роль или тип файла. Пишется в единственном числе. Формат: name.<suffix>.ts.

Хуки

  • use-name.hook.ts — файл хука, функция именуется useName

Корневые компоненты модулей

  • .business.tsx — бизнес-модуль (business/)
  • .infra.tsx — инфраструктурный модуль (infrastructure/)
  • .ui.tsx — UI-компонент (ui/)
  • .screen.tsx — экран (screens/)
  • .widget.tsx — виджет (widgets/)
  • .layout.tsx — layout (layouts/)

Логика

  • .store.ts — стор
  • .service.ts — сервис

Типы и контракты

  • .type.ts — типы и интерфейсы
  • .interface.ts — интерфейсы
  • .enum.ts — enum
  • .dto.ts — внешние DTO
  • .schema.ts — схемы валидации
  • .constant.ts — константы
  • .config.ts — конфигурация

Утилиты

  • .util.ts — утилиты
  • .helper.ts — вспомогательные функции
  • .lib.ts — библиотечный код

Тесты

  • .test.ts — тесты
  • .mock.ts — моки

Хорошо

business/
└── auth-by-email/
    ├── ui/
    │   └── login-form.tsx
    ├── hooks/
    │   └── use-auth.hook.ts
    ├── stores/
    │   └── auth.store.ts
    ├── types/
    │   └── auth.type.ts
    ├── auth-by-email.business.tsx
    └── index.ts

Плохо

business/
└── authByEmail/
    ├── LoginForm.tsx
    ├── useAuth.ts
    ├── authStore.ts
    └── index.ts

Булевы значения

  • Использовать префиксы is, has, can, should.

Хорошо

const isReady = true;
const hasAccess = false;
const canSubmit = true;
const shouldRedirect = false;

Плохо

// Плохо: неясное булево значение без префикса.
const ready = true;
const access = false;
const submit = true;

События и обработчики

  • Обработчики начинать с handle.
  • События и колбэки начинать с on.

Хорошо

const handleSubmit = () => { ... };
const onSubmit = () => { ... };

Плохо

// Плохо: неочевидное назначение имени.
const submitClick = () => { ... };

Коллекции

  • Для массивов использовать имена во множественном числе.
  • Для словарей/мап — использовать суффиксы ById, Map, Dict.

Хорошо

const users = [];
const usersById = {} as Record<string, User>;
const userIds = ['u1', 'u2'];
const ordersMap = new Map<string, Order>();
const featureFlagsDict = { beta: true, legacy: false } as Record<string, boolean>;

Плохо

// Плохо: имя не отражает, что это коллекция.
const user = [];
// Плохо: словарь назван как массив.
const usersMap = [];
// Плохо: по имени непонятно, что это словарь.
const users = {} as Record<string, User>;