Топ ошибок начинающих TypeScript разработчиков: как их избежать

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Топ ошибок начинающих TypeScript разработчиков: как писать чистый и безопасный код

TypeScript — это мощный инструмент, который помогает разработчикам писать более предсказуемый и безопасный JavaScript-код. Однако, переходя с JS, многие новички совершают одни и те же ошибки, сводя на нет преимущества строгой типизации. В этой статье мы разберем 4 самые распространенные ошибки начинающих TypeScript разработчиков и покажем, как их исправить с помощью наглядных примеров.

1. Злоупотребление типом any

Самая частая и опасная ошибка — использование any везде, где TypeScript просит указать тип. Это превращает ваш код обратно в обычный JavaScript, лишая вас подсказок редактора и проверки типов во время компиляции.

❌ Плохой пример:

function processData(data: any) {
    return data.name.toUpperCase();
}

const result = processData(42); // Ошибка в рантайме! У числа нет свойства name

✅ Хороший пример:

interface UserData {
    name: string;
    age: number;
}

function processData(data: UserData): string {
    return data.name.toUpperCase();
}

const user: UserData = { name: "Иван", age: 30 };
const result = processData(user); // Работает корректно

Совет: Старайтесь использовать unknown вместо any, если тип действительно неизвестен. unknown заставит вас провести проверку типа перед использованием значения.

2. Игнорирование Strict Mode

Многие начинающие разработчики отключают строгий режим (strict: true) в tsconfig.json, чтобы "не отвлекаться на ошибки". Это лишает вас главного преимущества TypeScript — раннего обнаружения потенциальных багов.

Что включает Strict Mode:

  • strictNullChecks — запрещает присваивать null и undefined переменным, если это не указано явно.
  • noImplicitAny — запрещает неявное использование any.
  • strictFunctionTypes — более строгая проверка типов функций.

❌ Без Strict Mode:

function getLength(value: string | null) {
    return value.length; // Ошибка в рантайме, если value = null
}

✅ Со Strict Mode:

function getLength(value: string | null): number {
    if (value === null) {
        return 0; // Обрабатываем null явно
    }
    return value.length; // TypeScript знает, что value — это string
}

Совет: Всегда включайте "strict": true в tsconfig.json. Это сэкономит часы отладки в будущем.

3. Неправильная работа с асинхронностью

Ошибки с промисами и async/await — классика. Начинающие часто забывают обрабатывать ошибки или неправильно типизируют асинхронные функции.

❌ Плохой пример:

async function fetchData(url: string) {
    const response = await fetch(url);
    const data = response.json(); // Забыли await!
    return data;
}

✅ Хороший пример:

interface ApiResponse {
    id: number;
    title: string;
}

async function fetchData(url: string): Promise<ApiResponse> {
    try {
        const response = await fetch(url);
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        const data: ApiResponse = await response.json();
        return data;
    } catch (error) {
        console.error("Ошибка при загрузке данных:", error);
        throw error; // Пробрасываем ошибку дальше
    }
}

Совет: Всегда используйте try...catch для обработки ошибок в асинхронных функциях и не забывайте про await при вызове методов, возвращающих промис.

4. Игнорирование типов для внешних библиотек

Многие новички подключают популярные библиотеки (lodash, axios, moment), но не устанавливают для них пакеты типов. В результате TypeScript не знает, какие типы возвращают функции, и вы снова скатываетесь к any.

❌ Плохой пример:

import _ from 'lodash'; // Ошибка: не удается найти модуль 'lodash' или его объявления типов

const result = _.chunk([1, 2, 3, 4], 2); // result: any

✅ Хороший пример:

npm install --save-dev @types/lodash

import _ from 'lodash';

const result: number[][] = _.chunk([1, 2, 3, 4], 2); // result: number[][]

Совет: Для большинства популярных библиотек существуют пакеты @types/имя_библиотеки. Устанавливайте их как dev-зависимости. Если для библиотеки нет типов, создайте файл declarations.d.ts и объявите типы вручную:

declare module 'my-custom-lib' {
    export function doSomething(value: string): number;
}

Заключение

TypeScript — это не просто "JavaScript с типами". Это инструмент, который помогает вам писать код, который легче читать, поддерживать и отлаживать. Избегая четырех перечисленных выше ошибок, вы сможете раскрыть весь потенциал TypeScript и сделать свой код более надежным.

Краткий чек-лист для начинающего TypeScript разработчика:

  • ✅ Никогда не используйте any без крайней необходимости. Заменяйте его на unknown или конкретные интерфейсы.
  • ✅ Включайте "strict": true в tsconfig.json.
  • ✅ Всегда обрабатывайте ошибки в асинхронном коде.
  • ✅ Устанавливайте типы для всех внешних библиотек.

Помните: чем раньше вы научитесь правильно работать с TypeScript, тем быстрее вы станете профессиональным разработчиком. Удачи в изучении!

Блоги

Рекомендаций по книгам