3. Нейминг
3.1. Правила наименования переменных:
| ⚡ Description | ✅ Good | ❌ Bad |
|---|---|---|
| Избегайте однобуквенных переменных (в циклах допустимо) | const name = 'Ivan' | const n = 'Ivan' |
| Избегайте аббревиатур | const startOfWeek = 'Sunday' | const sof = 'Sunday' |
| Избегайте бессмысленных имен | const appInit = false | const foo = false |
| Избегайте названий переменных с нижним подчеркиваем | const getUser = {} | const _getUser = {} |
| Избегайте цифр в названии переменных * Исключение в том случае если цифра входит в название сущности | const book const olympusEM5 | const book1 |
| Функция должна выполнять что то одно и называться соответственно | const fetchPosts const sortPosts | const fetchAndSortPosts |
| Стараться придерживаться общепринятых названий для стандартных операций | const trimPath const cutPath | const truncatePath |
| Придерживаться единого соглашения для однообразных операций. Например для получения данных используется get, то во всех функциях получения данных стоит придерживаться этого нейминга | const getProfile const getNews const getPosts | const fetchProfile const recieveNews const getPosts |
3.2. Для названий файлов с компонентами используем PascalCase, для всех остальных camelCase:
| ⚡ Type | ✅ Good | ❌ Bad |
|---|---|---|
| components | ImagePreview.tsx | index.tsx, image-preview.tsx, image_preview.tsx |
| slice | appSlice.ts | app-slice.ts |
| selectors | appSelectors.ts | app-selectors.ts |
| utils | handleServerAppError.ts | handle-server-app-error.ts |
| hooks | useDebounce.ts | use-debounce.ts |
| api | authApi.ts | auth-api.ts, authAPI.ts |
3.3. Для названий переменных (массивов, объектов, функций) используем camelCase:
| ⚡ Type | ✅ Good | ❌ Bad |
|---|---|---|
| объекты (массивы) | const users = [] | const Users = [] |
| функции | const getRandomNumber | const GetRandomNumber, const get-random-number |
3.4. Названия констант пишем через CONSTANT_CASE:
| ✅ Good | ❌ Bad |
|---|---|
const MAX_LENGTH = 100 | const Max_length = 100, const max-length = 100 и т.д. |
3.5. Для enum используем PascalCase. Более подробно в разделе Enums
| ✅ Good | ❌ Bad |
|---|---|
enum Direction | enum DIRECTION, enum direction |
3.6. Названия типов (type)
- ❗ Т.к. пропсы мы не экспортируем предлагаю их называть
Props - ❗ Для экспортируемых типов (библиотеки, переиспользуемые компоненты) используем название сущности +
Props - ❗ Не пишем в конце Type
| ⚡ Type | ✅ Good | ❌ Bad |
|---|---|---|
| props | Props | PropsType, UserProps, UserPropsType |
| exported props | ButtonProps | ButtonPropsType |
| типы, которые есть в проекте | User | UserType |
3.7. Разделяем через точку dot.case (type, storybook, test)
| ⚡ Type | ✅ Good | ❌ Bad |
|---|---|---|
| type | authApi.types.ts | authApiTypes.ts, authApi-types.ts |
| storybook | SignIn.stories.tsx | --- |
| test | authSlice.test.ts | --- |
3.8. Тесты кладем в папку с названием __tests__
💡
Это связано со значением свойства testMatch в конфигурации Jest, которое по умолчанию выглядит так:
Terminal
[ "**/__tests__/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)" ]Это означает, что Jest будет считать файл тестом, если он имеет расширение .js(x) или .ts(x) и:
- Файл содержит в своем имени .test или .spec.
- Файл находится внутри папки с названием tests.
Таким образом, если у вас есть файлы с расширением .js(x) или .ts(x), и они соответствуют одному из этих двух условий, Jest будет рассматривать их как файлы для запуска тестов. Это помогает Jest автоматически находить и запускать ваши тесты в соответствии с этими соглашениями.
🔗
3.9. Структура проекта
🔗
- store.ts
- App.tsx
- appSlice.ts
- authApi.ts
- authApi.types.ts
- useLogin.ts
- authSlice.ts