TypeScript - Enums: Обзор и когда не надо использовать

แชร์
ฝัง
  • เผยแพร่เมื่อ 28 พ.ย. 2024

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

  • @JoelMiller-z1x
    @JoelMiller-z1x 9 หลายเดือนก่อน +55

    спасибо, какой вы спокойный мужик. похвально. спокойно объясняете

    • @PurpleSchool
      @PurpleSchool  9 หลายเดือนก่อน +1

      Спасибо)

  • @АлександрЕлагин-м2ю
    @АлександрЕлагин-м2ю 2 ปีที่แล้ว +6

    спасибо за видео, надеюсь видео будут выходить чаще чем статьи на сайте

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

      Буду стараться делать хотя бы 1 в неделю. Видео проще записывать мне)

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

    6:34 - у нас не появилась константа ADMIN, а она уже была в ts в строке 5 (6:21), к тому же она ADMIN, а не Admin

    • @PurpleSchool
      @PurpleSchool  2 ปีที่แล้ว

      Верно, оговорился

  • @АндрейК9-я3ч
    @АндрейК9-я3ч 2 ปีที่แล้ว +1

    ​ @Anton Larichev жаль что не сказал про Union , мне кажется что интереснее сравнить Enum и Union. А про то , что бизнес логику нужно хранить на беке и так понятно )

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

      Можно рассмотреть в отдельном видео)

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

    Что лучше использовать enum или литеральный тип? Например, у нас есть тип type UserRoles = ‘admin’ | ‘user’ и enum UserRoles {admin, user} и создаётся тип пользователя type User = {name: string, role: ??? }. В этом случае лучше enum или type? При проверке в обоих случаях ts выдаёт ошибку, если правая часть содержит ошибку

    • @PurpleSchool
      @PurpleSchool  2 ปีที่แล้ว

      Enum хороши, когда мы хотим придать смысл значение. Если admin ещё можно понять что относится к роли (да и то только при наведении на тип), то к примеру BYN не сразу очевидно, что это валюта, а Currency.BYN даёт сразу понимание контекста. Особенно это видно с числовыми enum. А так можно использовать и то и то.

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

    Антон: просто спасибо ваМ)

  • @СергейКозлов-н1л
    @СергейКозлов-н1л 2 ปีที่แล้ว +4

    Если честно, не очень понял кейс про то, что enum могут дополняться в дальнейшем и его лучше в таком случае не юзать. Даже если мы будем тянуть значения из базы, к примеру роли, данное значение с сервера все равно нужно типизировать и в любом случае придется править/дополнять описанный тип ранее, пускай даже если он будет обозначен как Union, type Data = {...anything, role: 'admin' | 'user'}

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

      Если от этого значения зависит бизнес логика - да. Но если у вас просто выходит сотрудник и нужно его добавить для, скажем, отображения - править код не надо и это экономия. Так же в микросервисах если нужно изменить логику можно изменить в 1-м месте, вместо того, чтобы публиковать для всех новый enum и обновлять все микросервисы по цепочке.

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

    вроде бы const enum в официальной доке TS советуют не использовать совсем

  • @ЕвгенийЛисицын-ь7т
    @ЕвгенийЛисицын-ь7т 2 ปีที่แล้ว

    Только начал изучать TS и не совсем понимаю, чем отличается enum от простого массива при условии, что в enum мы значения не меняем и они остаются по умолчанию 0,1,2...n?

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

      Мы может задать любые значения и обращаться не по индексу, а по имени enum

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

    Оу, а разве нельзя написать просто вот так?
    const user = {
    name: 'admin;
    } as const

  • @alexandrkudryashov7170
    @alexandrkudryashov7170 2 ปีที่แล้ว

    а userRole не может разве расшириться? Если например ролевка будет модфицироваться/меняться в зависимости от появления нового сотрудника?

    • @PurpleSchool
      @PurpleSchool  2 ปีที่แล้ว

      Могу меняться, но при добавлении роли нам всё равно придётся менять логику проверки роли и где она используется, поэтому при добавлении новой роли нам нужно будет в любом случаем лезть в код.

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

    Выглядит так, будто я могу не использовать enum вовсе, а предпочитать ему перечисление в типе строковых литералов. Буду ли я в этом не прав?

    • @PurpleSchool
      @PurpleSchool  2 ปีที่แล้ว

      Можно вообще не использовать, но он даёт хорошую читабельность для числовых значениях. Для строк строковые литералы подойдут вполне.

  • @sergeyvp
    @sergeyvp 2 ปีที่แล้ว

    А вот так нельзя просто написать? Без ТС.
    const users = {
    admin: 0,
    user: 1,
    };
    const users2 = {
    admin: "admin",
    user: "user",
    };

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

      Без TS все можно написать, ведь TS транспилируется у JS.

  • @dimitriy8689
    @dimitriy8689 9 หลายเดือนก่อน

    не совсем понятно, пошел искать дальше

  • @DFront-t5f
    @DFront-t5f 2 ปีที่แล้ว +1

    Как для технического директора и профессионального разработчика, достаточно слабо прикрыть слова "Не использовать!" таким аргументом. Без обид, думаю это повод тебе копнуть глубже.

    • @PurpleSchool
      @PurpleSchool  2 ปีที่แล้ว

      Не очень понял сформулированное утверждение.

  • @biLLie_wiLLie
    @biLLie_wiLLie 2 ปีที่แล้ว

    Краткое содержание видео - не используйте enum)

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

      Не совсем) Если у вас монолит и есть перечисления, которые могут меняться только при изменении бизнес требований, это хороший кандидат на enum)

    • @CJIu3eHb
      @CJIu3eHb 2 ปีที่แล้ว

      @@PurpleSchool А если куча сервисов - то может надо его просто вынести в shared библиотеку?