Какие знаешь плохие паттерны в TypeScript

«Какие знаешь плохие паттерны в TypeScript» — вопрос из категории TypeScript, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

  1. Использование any – убивает типизацию, теряем все преимущества TS.
    function processData(data: any) { ... } // ❌
  1. Избыточные нестрогие интерфейсыinterface User { [key: string]: any } делает типы бессмысленными. Лучше явно описать структуру.

  2. Чрезмерные опциональные поля (?):

    interface Config { url?: string; timeout?: number } // ❌ Сложно отследить обязательность
  1. Неиспользование Utility-типов – дублирование кода вместо Partial, Pick, Omit.

  2. Типизация as без валидации – риск runtime-ошибок:

    const user = {} as User; // ❌
  1. Пустые интерфейсы (interface Empty {}) – бесполезны, лучше использовать type или unknown.

  2. Игнорирование strict режима – приводит к неявным ошибкам. Всегда включать strict: true в tsconfig.json.

  3. Over-engineering с дженериками – излишняя сложность там, где можно обойтись простыми типами.

Лучше следовать принципу: "Пиши типы так, чтобы ошибки обнаруживались на этапе компиляции".