Самые частые ошибки в TypeScript

Поделиться
HTML-код
  • Опубликовано: 25 дек 2024

Комментарии • 78

  • @Elator11777
    @Elator11777 2 года назад +1

    Спасибо, очень полезно, я не новичок, но почерпнул кое-что для себя!
    Продолжайте!

  • @KuruApni
    @KuruApni 2 года назад +2

    TKey, TValue хорошая тема. Зачастую в крупных проектах люди даже не задумываюсь городят женерики через K,T,V. Нередко видел сложные кейсы с 7-8 латинскими буквами. А тут довольно очевидный способ упростить себе жизнь. Даже как-то неловко, что за все то время, что я работал с TS мне и в голову не приходило, что так можно сделать. Спасибо!

    • @PurpleSchool
      @PurpleSchool  2 года назад

      Рад, что видео было полезно)

  • @hrp2000
    @hrp2000 2 года назад +3

    Очень полезный видос, новичкам - в особенности!

  • @Emagnarium
    @Emagnarium Год назад

    enum в TS,как goto в тех языках, где он есть: тебя учат его не юзать. Ты находишь 1-2 крутых применения. Учишь не юзать) Учитывая, что есть перечисляемые строки иногда enum очень вредит) особенно в json схемах. А к ним всё сводится в API)

  • @auranode4542
    @auranode4542 2 года назад +2

    Спасибо за видео!Полезно.

  • @alexmilovanov8802
    @alexmilovanov8802 2 года назад +6

    Числовые енумы еще и менее типобезопасны. К перечислению из видео можно обратиться Role[123] и тайпскрипт не ругнется на это. Ну и если параметр функции имеет тип числового енума, то в неё можно передавать любое число

    • @PurpleSchool
      @PurpleSchool  2 года назад

      Совершенно верно!

  • @alekseypavlov2539
    @alekseypavlov2539 5 месяцев назад

    Проблема с enum которые записаны в таком виде ещё и в том
    enum Roles {
    Student,
    Teacher,
    }
    что если кто-то добавит на первую строчку ещё одну запись, например
    enum Roles {
    Guest, //Сюда
    Student,
    Teacher,
    }
    то значения свойств перепутаются и при записи в БД будет всё очень плохо, Guest станут Student, а Student станет Teacher

  • @world_newsreels
    @world_newsreels Год назад

    Спасибо большое за видео !!! Очень познавательно и понятно!

  • @ВиталийПугач-к8ю
    @ВиталийПугач-к8ю 2 года назад +1

    Спасибо!

  • @vladimirp.5490
    @vladimirp.5490 2 года назад +3

    ICatFact читаешь как IGetFucked ахаха. А видос хороший, спасибо!)

  • @ПётрПетров-д2ч4х
    @ПётрПетров-д2ч4х 2 года назад +1

    Да, я тоже нашёл для себя полезные моменты))

  • @EgorMoscowNeverSleep
    @EgorMoscowNeverSleep Год назад +1

    7:00 в чем смысл строковых enum, если имя и значение одинаковые? Просто написать enum, ради enum? Гораздо лучше в этом случае перечислить в типе все возможные значения через union.
    А (const) enum как раз и нужны для того, чтобы сделать человекочитаемое название для примитивного значения, такого как number.
    Например, я часто использую const enum для описания битовых флагов и масок.

    • @тимур_атмосферный
      @тимур_атмосферный 11 месяцев назад

      Смысл в том, что бы когда ты писал условный Role.student, это высвечивалось списком доступных ролей, а если написать обычной строкой, может быть ошибка и undefined вылезти какой-то

    • @EgorMoscowNeverSleep
      @EgorMoscowNeverSleep 11 месяцев назад

      @@тимур_атмосферный почему "обычной строкой", если я написал: "через union"? И подсказки будут работать в IDE и типизация строгая.

  • @Altegar
    @Altegar Год назад

    Скажите, пожалуйста, какой шрифт вы используете?

  • @nomercylsk
    @nomercylsk 2 года назад +2

    Хотелось бы заметить, что не в первом видео у многих популяризаторов TS вижу отсутствие возвращаемых типов в методах/функциях. А это очень важный пункт, особенно для "отдельно стоящих" функций. Так вы на уровне написания кода "гарантируете" себе, что собираемый ответ функции будет совпадать по типу с тем, что ожидается, потому что иначе будет результату назначен тип ответа, и не факт, что он будет совпадать с ожиданиями клиентов метода/функции.

    • @PurpleSchool
      @PurpleSchool  2 года назад +2

      Поддерживаю что писать возврат желательно, можно даже настроить eslint правило, но иногда бывает overkill, особенно для данных из базы. Поэтому сам не всегда следую.

    • @vroshupkin1
      @vroshupkin1 2 года назад

      Иногда в контексте уже просто ясно что за тип и тайпскрипт сам забирает этот тип

    • @Emagnarium
      @Emagnarium Год назад

      ​но молодняк лучше учить его писать. Помогает растить архитектурное и контрактное прогание)

  • @vladk3201
    @vladk3201 Год назад

    параметр по умолчанию, думаю, можно к ошибкам js в целом отнести, а не ts)

    • @PurpleSchool
      @PurpleSchool  Год назад

      Тоже верно

    • @vladk3201
      @vladk3201 Год назад

      @@PurpleSchool а так да, спасибо за видео, полезно было

  • @АлексейБояров-ю8ф
    @АлексейБояров-ю8ф 2 года назад

    Антон, как считаете в ближайшие 2-3 года главные фичи тайпскрипта войдут в джаваскрипт через новые пропоузелы?

    • @PurpleSchool
      @PurpleSchool  2 года назад

      Что-то войдет, что-то нет.

  • @KostiaBazrov
    @KostiaBazrov Год назад

    а зачем аксиос , еси фетч есть?

    • @PurpleSchool
      @PurpleSchool  Год назад

      Более удобный как по мне

  • @Max-nr1bv
    @Max-nr1bv 2 года назад +3

    Зачем нужны енамы в современном тайпскрипте?
    Просто используйте const объект с записью as const после определения.

  • @NN-it2vm
    @NN-it2vm 2 года назад

    Что думаешь про strictNullCheck?

    • @PurpleSchool
      @PurpleSchool  2 года назад

      Обязательно нужен)

  • @AntowaKartowa
    @AntowaKartowa 2 года назад

    Подскажите, а может быть у вас есть разбор того как правильно объявить типы для библиотеки (публикуется как npm) в одном файле так, чтоб эти типы были доступны в проектах использующих её как зависимость.
    Интересно как базовое решение так и вариант когда библиотека состоит из модулей которые можно импортировать отдельно
    import { auth, log } from 'my-pkg';
    import auth from 'my-pkg/auth';
    import log from 'my-pkg/log';
    Спасибо.

    • @PurpleSchool
      @PurpleSchool  2 года назад

      Есть про типизацию сторонних библиотек в курсе по TypeScript, про публикацию типов нет.

    • @AntowaKartowa
      @AntowaKartowa 2 года назад

      @@PurpleSchool Вот про типизацию сторонних библиотек много где есть и там в общем всё вроде бы более менее понятно. А вот как для своего пакета правильно d.ts сформировать что-то как-то мало информации.
      Но в любом случае спасибо.

  • @sir_alist
    @sir_alist 2 года назад

    Что за тема в vscode ?

  • @reactivniy1796
    @reactivniy1796 2 года назад

    Скажите пожалуйста что за тема?

  • @OlegBondar1998
    @OlegBondar1998 2 года назад

    Чую след C# 😁

    • @PurpleSchool
      @PurpleSchool  2 года назад

      Так один и тот же человек проектировал эти языки)

  • @SACREDDEVELOPER
    @SACREDDEVELOPER 2 года назад +1

    05:03 Вот как по мне в это и проблема TS тут хоть как не крути на выходе будет не пойми что, но зато мы используем TS ... Очень много мест в коде и библиотеках в которых мы все равно не будет знать что там будет за тип, а только предполагать, эх ...

    • @PurpleSchool
      @PurpleSchool  2 года назад +1

      Не очень понял. Если мы все верно типизируем, то мы можем не знать только приходящие извне данные. И такая же проблема будет и в Go и в C#. Все равно нужно валидировать все входящие данные

    • @SACREDDEVELOPER
      @SACREDDEVELOPER 2 года назад

      @@PurpleSchool валидировать то понятно, но вот в данном случае axios при указании джинерика не делает валидацию что data является типом что мы указали а просто надеется на то что он им будет в C# если тип не будет соответвовать джинерика будет ошибка, тут нет потому что TS это по-сути кодогенератор и не принимает участия в выполнении кода, отсюда и проблемы с дженериками в TS. Отсюда и написал что мы надеемся что data будет тем самым что мы туда передадим. Просто плохой пример с axios :)

    • @PurpleSchool
      @PurpleSchool  2 года назад +1

      Конечно, он просто позволяет описать тип. Валидацию мы должны сделать руками

    • @ИмяФамилия-э4ф7в
      @ИмяФамилия-э4ф7в 2 года назад +1

      Это проблема JavaScript, которую TS не решает, т.к. не может решить в принципе. Просто не нужно ожидать того, чего нет. Кстати, не вижу никакой проблемы сделать валидатор, который в рантайме будет проверять соответствие ответа сервера ожидаемому типу. Кстати, таких валидаторов есть, и не мало.

    • @МистерХренасеуебаси
      @МистерХренасеуебаси 2 года назад

      @@ИмяФамилия-э4ф7в "Кстати, не вижу никакой проблемы сделать валидатор, который в рантайме будет проверять соответствие ответа сервера ожидаемому типу" - Да, такое подходит в случае если мы говорим об запросах на сервер, но отсутствие нормальной кодогенерации, крайне ограничивает во всех других случаях, когда с помощью нее можно было бы сделать более удобный библиотеки и оптимизировать код.
      Например, написать тот же валидатор лишь с помощью типов, как пытаются сделать с помощью TS+

  • @deniskorablev2648
    @deniskorablev2648 2 года назад

    по звуку рассинхрон?

    • @PurpleSchool
      @PurpleSchool  2 года назад +1

      Вроде нет

    • @Komissar666
      @Komissar666 2 года назад +1

      @@PurpleSchool все отлично, большое спасибо за видео

    • @PurpleSchool
      @PurpleSchool  2 года назад

      Пожалуйста)

  • @dmitriy8735
    @dmitriy8735 2 года назад

    Пример с типизацией дженерика axios вместо as ни на что не влияет и ни от чего не защищает. Если нужна проверка входных данных - есть валидация по json схеме. Ну или обычные if-ы.

    • @PurpleSchool
      @PurpleSchool  2 года назад +1

      Конечно. Тут point в том, чтобы использовать данные библиотеками Generic для верной типизации, а не грубо приводить к типам

    • @dizaynerak
      @dizaynerak 2 года назад

      @@PurpleSchool вангую что под капотом происходит примерное тоже самое. По сути просто код стал красивее и короче

    • @dmitryrazdobudko4914
      @dmitryrazdobudko4914 2 года назад

      ну то есть, что мы указали в дженерике тип, что привели через as - в любом случае мы точно не знаем, придем ли нам данные указанного типа или нет? И нужна именно проверка входящих данных

  • @amigocom1301
    @amigocom1301 2 года назад

    Enum'ы крайне полезны, когда кто то написал бек г*внокодом и юзает там же дефолтные значения.

  • @MrZamatay
    @MrZamatay 2 года назад

    Не знаю крайне не согласен про запись в БД строкового значения, все таки для БД гораздо эффективнее писать числа.

    • @PurpleSchool
      @PurpleSchool  2 года назад +2

      Зато эффективнее потом вытаскивать из базы и анализировать строки, а не магические значения. Особенно актуально, если с базой работают не только разработчики, но м аналитики.

  • @DarkAiR3
    @DarkAiR3 Год назад

    Так забавно видеть как вы рассказываете об ошибках TS, но при этом не указываете возвращаемые типы для функций.
    После этого я не верю в то, что вы действительно правильно используете TS. Как будто вы пытаетесь, но на автомате продолжаете мыслить как JS.
    В целом ваши советы правильны, но на мой взгляд слишком тривиальны.

    • @PurpleSchool
      @PurpleSchool  Год назад

      Забавный выводов основании не указания возвращаемых типов) я как раз на JS чистом почти никогда не пишу, только TS, Go, C#, где везде типизация

    • @DarkAiR3
      @DarkAiR3 Год назад

      @@PurpleSchool Тогда странно, что вы не пишите возвращаемые типы, ибо тогда и вопроса про cast из видео не возникло бы - когда вы бы убрали "data as T", то автоматом увидели бы ошибку, а не any по-умолчанию. А так вы дженериком решаете не проблему, а последствия.

  • @ArthurMudrick
    @ArthurMudrick 2 года назад

    В середине ролика нормально склоняешь Тайпскрипт (в Тайпскрипте, Тайпскриптом, по Тайпскрипту), но в самом начале и самом конце ролика почему-то не склоняешь -- смотрите другие видео по Тайпскрипт... По чему? по Тайпскрипту, а не по Тайпскрипт. В общем, не нужно бояться склонять слова в русском языке.

    • @centwor1on167
      @centwor1on167 2 года назад +5

      Комментарий ни о чем)