Введение: зачем нужен code review в TypeScript
Code review (ревью кода) — это процесс проверки написанного кода другими разработчиками. Для начинающих TypeScript-разработчиков это не просто формальность, а мощный инструмент обучения. Правильное ревью помогает выявлять ошибки на ранних этапах, улучшать архитектуру и поддерживать единый стиль в команде.
В этой статье мы разберем, на что конкретно обращать внимание при code review в TypeScript, как давать обратную связь, чтобы она была полезной, и приведем примеры кода. Материал ориентирован на новичков, которые только начинают работать с TypeScript и хотят прокачать навыки ревью.
1. Типизация: основа TypeScript
Первое, что нужно проверять в TypeScript — корректность типов. TypeScript добавляет статическую типизацию, что снижает количество багов, но только если типы используются правильно.
Что проверять:
- Явные типы для параметров и возвращаемых значений. Избегайте
anyвезде, где это возможно. - Использование интерфейсов и типов вместо примитивов для сложных структур.
- Правильное использование Union и Intersection типов.
- Отсутствие лишних приведений типов (type assertions).
// Плохо: неявный тип и any
function processData(data: any) {
return data.name;
}
// Хорошо: явный интерфейс
interface User {
name: string;
age: number;
}
function processData(data: User): string {
return data.name;
}
При ревью обращайте внимание на места, где тип any мог бы быть заменен на более конкретный. Это сразу повышает читаемость и безопасность кода.
2. Проверка на null и undefined
TypeScript помогает избежать ошибок с null и undefined через strict null checks. Но разработчики часто забывают обрабатывать опциональные значения.
Что проверять:
- Использование
?для опциональных свойств и параметров. - Проверку на
nullперед доступом к свойствам. - Использование операторов
??и?..
// Плохо: нет защиты от undefined
function getLength(str: string | undefined): number {
return str.length; // Ошибка: str может быть undefined
}
// Хорошо: используем optional chaining и nullish coalescing
function getLength(str: string | undefined): number {
return str?.length ?? 0;
}
В code review проверяйте, что все потенциально пустые значения обработаны. Это частая причина багов в продакшене.
3. Чистота кода и читаемость
TypeScript — это надстройка над JavaScript, поэтому принципы чистого кода остаются актуальными. Хороший code review включает проверку стиля и структуры.
Что проверять:
- Именование переменных и функций. Имена должны быть осмысленными.
- Длина функций. Если функция делает больше одного дела — разбивайте.
- Комментарии. Они должны объяснять «почему», а не «что».
- Отсутствие магических чисел. Выносите константы в отдельные переменные.
// Плохо: магические числа и неясное имя
function calc(a: number) {
return a * 1.2;
}
// Хорошо: константа и понятное имя
const TAX_RATE = 0.2;
function calculateTotalWithTax(amount: number): number {
return amount * (1 + TAX_RATE);
}
При ревью задавайте вопрос: «Сможет ли новый разработчик понять этот код без пояснений?» Если нет — просите улучшить.
4. Как давать обратную связь: мягко и конструктивно
Code review — это не экзамен, а диалог. Для начинающих особенно важно получать обратную связь без критики личности. Вот несколько правил, которые помогут давать полезные комментарии.
Правила хорошего ревью:
- Начинайте с позитива. Отметьте, что сделано хорошо.
- Формулируйте как предложения, а не как приказы. Вместо «Исправь это» — «Что если мы вынесем это в отдельную функцию?»
- Объясняйте причину. Не просто «Тип неверный», а «Использование any может привести к ошибкам, давай заменим на конкретный интерфейс».
- Используйте вопросы. «Почему ты выбрал этот подход?» — это помогает автору самому прийти к правильному решению.
- Не исправляйте всё сразу. Если код работает и безопасен, можно пропустить мелкие стилистические замечания.
// Пример комментария в code review (плохо)
// "Убери any, это плохо"
// Пример комментария (хорошо)
// "Я вижу, что здесь используется any.
// Можем ли мы заменить его на интерфейс User?
// Это сделает код более предсказуемым и безопасным."
5. Проверка асинхронности и обработки ошибок
Современный TypeScript активно использует асинхронный код. При ревью важно убедиться, что ошибки обрабатываются корректно, а промисы не «забыты».
Что проверять:
- Все
asyncфункции должны иметьawaitдля промисов. - Обработка ошибок через
try/catchили.catch(). - Отсутствие «висячих» промисов без обработки.
// Плохо: нет обработки ошибок
async function fetchUser(id: number) {
const response = await fetch(`/api/users/${id}`);
return response.json();
}
// Хорошо: обработка ошибок
async function fetchUser(id: number): Promise<User | null> {
try {
const response = await fetch(`/api/users/${id}`);
if (!response.ok) throw new Error('User not found');
return await response.json();
} catch (error) {
console.error('Failed to fetch user:', error);
return null;
}
}
При code review проверяйте, что все возможные сценарии ошибок учтены. Это особенно важно для начинающих, которые могут забыть про try/catch.