← Назад ко всем вопросам

Когда нельзя использовать interface в TypeScript

1️⃣ Как кратко ответить

Интерфейсы в TypeScript не следует использовать, когда требуется объединение типов, использование примитивных типов, создание типов с помощью условных типов или когда необходимо использовать возможности, доступные только в типах, такие как вычисляемые свойства или маппинг типов.

2️⃣ Подробное объяснение темы

Интерфейсы в TypeScript — это мощный инструмент для определения структуры объектов. Однако, есть ситуации, когда использование интерфейсов не подходит, и вместо них следует использовать типы (type aliases).

  1. Объединение типов (Union Types):
    Интерфейсы не поддерживают объединение типов. Если вам нужно создать тип, который может быть одним из нескольких типов, используйте type.

    type Shape = Circle | Square;
    

    Здесь Shape может быть либо Circle, либо Square. Интерфейсы не могут быть использованы для этой цели.

  2. Примитивные типы:
    Интерфейсы предназначены для описания объектов, и их нельзя использовать для примитивных типов, таких как string, number, boolean.

    type ID = string | number;
    

    В этом примере ID может быть либо строкой, либо числом. Интерфейсы не могут описывать такие типы.

  3. Вычисляемые свойства и маппинг типов:
    Типы позволяют использовать возможности, такие как вычисляемые свойства и маппинг типов, которые недоступны для интерфейсов.

    type Readonly<T> = {
      readonly [K in keyof T]: T[K];
    };
    

    Этот пример создает новый тип, где все свойства исходного типа T становятся только для чтения. Интерфейсы не поддерживают такую функциональность.

  4. Условные типы:
    Условные типы позволяют создавать типы на основе условий, что невозможно с интерфейсами.

    type IsString<T> = T extends string ? true : false;
    

    Здесь IsString будет true, если T — это string, и false в противном случае. Интерфейсы не могут выражать такие условия.

  5. Сложные манипуляции с типами:
    Если требуется сложная манипуляция с типами, например, извлечение определенных свойств или создание новых типов на основе существующих, типы предоставляют более гибкие возможности.

    type Pick<T, K extends keyof T> = {
      [P in K]: T[P];
    };
    

    Этот пример создает новый тип, содержащий только свойства K из типа T. Интерфейсы не могут быть использованы для таких манипуляций.

В заключение, интерфейсы отлично подходят для описания структуры объектов и классов, но когда требуется более сложная работа с типами, такие как объединения, условные типы или манипуляции с типами, следует использовать типы.

Тема: TypeScript
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки