Typescript
Стек технологий
Мы используем следующие инструменты для разработки:
- Node.js: версия
20.x
. - pnpm: для управления зависимостями.
- Vite: в качестве сборщика.
Общие правила
1. Кодовая база
- Пишем код только на TypeScript.
- Используем
pnpm
для установки и управления зависимостями. - Используем строгий линтинг и форматирование, описанные в этом документе.
2. Форматирование
- Отступы — 4 пробела.
- Строки заключаем в двойные кавычки (
"string"
). - Используем точку с запятой (
;
) в конце каждой инструкции. - Максимальная длина строки — 120 символов.
3. Стиль именования
- Используем camelCase для переменных и функций.
- Используем PascalCase для названий классов и типов.
- Переменные и параметры должны быть понятными и информативными. Минимальная длина идентификатора — 2 символа, за исключением переменных
i
иj
(например, в циклах). - Не допускается использование
_
в начале или конце имен.
4. Линтинг
- Используем ESLint с конфигурацией для TypeScript.
- Настраиваем правила, чтобы обеспечить строгую проверку и консистентность.
Настройки ESLint для TypeScript
{
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"rules": {
"@typescript-eslint/no-explicit-any": "error",
"@typescript-eslint/explicit-function-return-type": "error",
"@typescript-eslint/no-unused-vars": [
"error",
{ "args": "all", "argsIgnorePattern": "^_" }
],
"@typescript-eslint/no-inferrable-types": "error",
"quotes": ["error", "double"],
"semi": ["error", "always"],
"indent": ["error", 4],
"max-len": ["error", { "code": 120 }],
"camelcase": ["error", { "properties": "always" }],
"id-length": [
"error",
{ "min": 2, "properties": "always", "exceptions": ["i", "j"] }
],
"no-restricted-syntax": ["error", "LabeledStatement", "WithStatement"],
"no-lone-blocks": "error",
"no-tabs": "error",
"no-trailing-spaces": "error",
"no-unreachable": "error",
"no-bitwise": "error",
"prefer-const": "error",
"eqeqeq": ["error", "always"],
"no-shadow": "error",
"no-param-reassign": "error",
"complexity": ["error", { "max": 10 }],
"max-params": ["error", 3],
"prefer-object-spread": "error",
"no-warning-comments": [
"error",
{ "terms": ["FIXME"], "location": "anywhere" }
]
}
}
Примеры кода: Good / Bad
Отступы
Good:
function greet(name: string): string {
return `Hello, ${name}`;
}
Bad:
function greet(name: string): string {
return `Hello, ${name}`;
}
Кавычки
Good:
const greeting = "Hello, world!";
Bad:
const greeting = 'Hello, world!';
Точка с запятой
Good:
const name = "Alice";
console.log(name);
Bad:
const name = "Alice"
console.log(name)
Именование переменных
Good:
const userName = "John";
const userAge = 25;
Bad:
const user_name = "John";
const UserAge = 25;
Использование any
Good:
function calculate(input: number): number {
return input * 2;
}
Bad:
function calculate(input: any): any {
return input * 2;
}
Неиспользуемые переменные
Good:
function processItems(items: string[]): void {
items.forEach(item => {
console.log(item);
});
}
Bad:
function processItems(items: string[]): void {
items.forEach(item => {
const unusedVar = item;
});
}
Использование let
вместо const
Good:
const count = 10;
Bad:
let count = 10;
Сложность функций
Good:
function isEligible(age: number, hasID: boolean): boolean {
return age >= 18 && hasID;
}
Bad:
function isEligible(age: number, hasID: boolean, isCitizen: boolean): boolean {
if (age >= 18) {
if (hasID) {
if (isCitizen) {
return true;
}
}
}
return false;
}