Различия Type и Interface в TypeScript

แชร์
ฝัง
  • เผยแพร่เมื่อ 6 ก.ย. 2024
  • Для чего используются типы и интерфейсы в TypeScript и в чём их различие.
    Мой Telegram канал
    t.me/way_of_de...
    Вы можете поддержать мой канал:
    www.donational...
    donate.qiwi.co...

ความคิดเห็น • 10

  • @sergeimalinin
    @sergeimalinin ปีที่แล้ว +13

    Не совсем раскрыта тема видео)
    type можно расширять с помощью & и указывать как implements для класса - ошибки не будет.
    Главные отличия типов от интерфейсов:
    1. type используется для примитивов и функций (как ты сказал в видео)
    2. type позволяет динамически работать с типами с помощью utility types или union types. Например Omet, Pick, ReturnType, Partial и т.п. - то есть динамически создавать типы на основе каких-то других типов.
    3. type может использоваться для кортежа, а интерфейс нет
    Итого, если вы хотите типизировать объект/класс, указав все типы свойств вручную, то лучше использовать интерфейс. Если вы хотите динамически создать тип на основе какого-то другого типа / интерфейса, либо на основе каких-то других данные с помощью Utility Types, то надо использовать type (хотя других вариантов тут и нет).

    • @sergeimalinin
      @sergeimalinin ปีที่แล้ว +2

      Хотя и для функций тоже можно использовать интерфейс. Объявляется таким образом:
      interface Fn {
      (a: number) => : number;
      }
      Реализация функции с тами интерфейсом, например:
      const fn: Fn = (num) => num + 1;

    • @zzloyshkolnik5703
      @zzloyshkolnik5703 ปีที่แล้ว

      Спасибо, ваш комментарий полностью закрыл этот вопрос)

    • @Abdul-hy4cy
      @Abdul-hy4cy ปีที่แล้ว

      Спасибо за комментарий. Зашел сюда после прочтения статьи на хабре, когда на третьем пункте, то что я увидел в своем codesandbox разошлось с тем, что говорил автор видео. Что от type нельзя делать множественное наследование, то есть писать так: class Woman extends Human, Dishwasher. Потом написал так с помощью типов и никаких ошибок я не увидел у себя в IDE.

    • @Abdul-hy4cy
      @Abdul-hy4cy ปีที่แล้ว +1

      К твоему третьему пункту, теперь и интерфейс может использоваться в кортеже в версии ts 5.1.6. Хотя и на 4.7.4 тоже можно. Откуда ты взял инфу для третьего пункта ?

  • @Furamy
    @Furamy 10 หลายเดือนก่อน

    1. через интерфейс можно описать функцию
    2. Имплеменить типы в классах тоже можно, главное чтобы тип не был юнионом
    3. Наследовать типы можно через интерсекшн (&), получается тоже самое

  • @user-wr4br7sr9q
    @user-wr4br7sr9q ปีที่แล้ว +2

    Ну объединение типов тоже можно легко сделать с помощью &.

    • @dmitrii_gerasimov
      @dmitrii_gerasimov  ปีที่แล้ว +2

      Точно, спасибо за уточнение😊

    • @kirillbezrodny5107
      @kirillbezrodny5107 ปีที่แล้ว

      ++ и встаёт вопрос . Чем не наследование?

  • @jamjam3337
    @jamjam3337 ปีที่แล้ว

    👍👏