Условные Типы TypeScript / Infer / Conditional Types

Поделиться
HTML-код
  • Опубликовано: 19 дек 2021
  • Условные Типы (Conditional Types) позволяют использовать тернарные операторы в работе с типами. Ключевое слово infer внутри условных выражений используется для распознавания типа.
    Приятного просмотра! Буду благодарен за поддержку в виде комментария и лайка!
    👉 Поддержка канала: / wisejs
    ✔️ Если хочешь изучать программирование со мной, не забудь подписаться :)
    ruclips.net/channel/UCOxq...
    ✔️ Мой телеграм канал: t.me/joinchat/RVq-cmt6n1SJRS7Z
    #typescript #тайпскрипт #урокитайпскрипт #infer

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

  • @olezhonnv3215
    @olezhonnv3215 Год назад +6

    Вот именно эти вещи в ТС я и считаю дичью!
    Нечитабельно, какие-то условия в условиях, на генериках, с кучей скобочек - оверинжиниринг с типами.
    Надо долго в это вникать, и научиться читать такие вложенности.
    И тут еще просто))) Я такие выкрутасы видел на ТС, чтомозг плавится.

    • @pavelgor8402
      @pavelgor8402 9 месяцев назад

      хотел написать коммент, но ты опередил)

    • @user-vd2bi2gx5m
      @user-vd2bi2gx5m 2 месяца назад

      Со временем ты станешь лучше к этому относиться
      Когда то и reduce вызвал к сложности, правда?

  • @ibrmkoibrmko2493
    @ibrmkoibrmko2493 9 месяцев назад +4

    Материал очень интересный и хорошо подаётся! Огромная благодарность за труд!

  • @mrgrd56
    @mrgrd56 Год назад +6

    8:38
    а тут я не понял зачем ты использовал `T extends infer U ? ...`
    почему бы просто не написать:
    type GetStatus = T extends {status: any} ? T['status'] : null;
    есть какая-то разница разве?

  • @alexperemey6046
    @alexperemey6046 Год назад +9

    Банальное озвучивание справки... главное так и не озвучено: практическое применение. Где и когда это может понадобиться? Для чего используется?

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

    Спасибо большое, ты просто лучший. Несколько дней не мог понять что такое infer и зачем он нужен, кучу всего перечитал до этого. А тут меньше 10ти минут и до меня наконец-то дошло это и не только

    • @user-vl9te1cg3r
      @user-vl9te1cg3r Год назад

      То же самое. Несколько раз читал докуму, периодически к ней возвращаясь, но так и не мог понять с этим infer... А тут всё доходчиво и понятно

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

    Супер,лаконично и информативно,большое спасибо ! Условные типы,TypeScript, Infer, Conditional Types.

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

      спасибо за поддержку))

  • @user-yr5cp3pd1c
    @user-yr5cp3pd1c Месяц назад

    Спасибо, ибо это действительно сложно, мало где понятно и коротко объяснено, "спрашиваемо" на собесах, видано в кучках популярных либ, но не особо "используемо"))))))))) 👍👍👍👍👍👍👍👍👍👍👍👍👍👍

  • @user-ql8vd1gn3m
    @user-ql8vd1gn3m 2 года назад +3

    Вот такие видео нужны на Ютубе, спасибо!

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

      Спасибо за поддержку!

  • @user-rd8uh2ym3c
    @user-rd8uh2ym3c 2 года назад

    Спасибо автору. Лучшее объяснение из всех, что видел. Человек понимает, что говорит.

  • @user-no2rk3rz4e
    @user-no2rk3rz4e Год назад +3

    Помнится были функции коротенькие и понятные. Но появился тайпскрипт и эти функции разрослись до 5 страниц. Но багов меньше нестало)

    • @olezhonnv3215
      @olezhonnv3215 Год назад +2

      Да, это правда.

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

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

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

    Infer, typescript, conditional types - спасибо за примеры

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

    Отличный урок, спасибо за труд!

  • @user-vl9te1cg3r
    @user-vl9te1cg3r Год назад

    Братче, ты просто красава! Всё доходчиво и понятно, мне не хватало этого видео

  • @user-xe7sp3pr7t
    @user-xe7sp3pr7t 2 года назад +1

    Топ! Спасибо огромное автору!

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

    Незаслуженно мало подписчиков, материал реально годный) Infer, conditional types - огонь ))

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

    работаю с тайп скриптом месяцев 5, но такую навороченную жесть пока не умею писать) Максимум самые простые дженерики, Пики, Омиты, Экстенды и т.д.

    • @777KoroL777
      @777KoroL777 2 года назад +2

      Я тоже месяц назад начал учить его, как ты говоришь эти моменты понятны а так как автор делает конечно сам сразу не додумаешься. И вообще тс призван облегчить жизнь разрабам, а в итоге я голову ломаю)))

    • @olezhonnv3215
      @olezhonnv3215 Год назад +2

      ​@@777KoroL777 Ага, потому что ТС - дичь!

    • @user-mu4my8fq2e
      @user-mu4my8fq2e 9 месяцев назад +1

      @@777KoroL777 сначала ты работаешь на TS, потом TS работает на тебя)

  • @user-kr6lp7rm5y
    @user-kr6lp7rm5y 2 года назад +1

    Спасибо. Полезно когда нет возможности получить типы, но хочется полной типизации

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

    Отлично объяснил.

  • @user-fq4pc7fm2z
    @user-fq4pc7fm2z Месяц назад

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

  • @user-te9ci1tx4x
    @user-te9ci1tx4x Год назад

    Всё доходчиво👍

  • @user-xw8ur4sc6t
    @user-xw8ur4sc6t 4 месяца назад

    крутое видео, спасибо большое. жаль, что больше не снимаете(

  • @user-wu7mg1cu4e
    @user-wu7mg1cu4e Год назад

    лучшие уроки на ютуб, что я находил

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

    Круто, не знал о таких фишках)

  • @user-xj8io9rl7g
    @user-xj8io9rl7g Год назад

    Хорошо рассказал про TypeScript Infer Conditional Types

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

    Спасибо за infer!

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

    Респект за условные типы, все понятно. Но infer очень сумбурно объяснил, я все еще не понял, что именно оно делает, и как и зачем )

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

    Действительно классный канал, очень понятно объясняешь. Подписчиков мало. Надеюсь в какой то момент выстрелит. Спасибо!

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

    спасибо за infer, закрепил

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

    Оооо, бомба

  • @oRiGiNaLMrInsaf
    @oRiGiNaLMrInsaf 4 месяца назад

    В примере с TryInfer, зачем вообще infer? Можно напрямую получить тип как T[keyof T], разве нет?

  • @uncle-xxi
    @uncle-xxi Год назад

    Какая-то черная магия. Надо вникать. :)

  • @plexterq3
    @plexterq3 4 месяца назад

    Не очень понял infer на примере
    type GetStatus = T extends infer U ? U extends {status: any} ? U['status'] : null : null;
    Чем это отличается от просто?
    type GetStatus = T[keyof T];

  • @Alexander-fp4fs
    @Alexander-fp4fs 2 года назад

    отличные видео по typescript у тебя, а можешь плиз запилить видео react с typescript

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

      Кажется, таких видео уже десятки. Что именно интересно?

  • @user-sv1ze9gk3b
    @user-sv1ze9gk3b 2 года назад +3

    👉 Этот комментарий создан в качестве уважения автору и для продвижения его канала.

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

    Хорошие видосы, но мало!

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

    2:30
    Имхо не лучший пример :с
    Ибо гораздо лакончинее было бы сделать так:
    function getId(obj: T): T['id'] {
    return obj.id;
    }
    (я использовал тут ещё unknown вместо any но в данном случае разницы особо нет, но я предпочитаю unknown вместо any, когда это возможно)
    либо можно так ещё, с использованием infer:
    function getId(obj: T): T extends {id: infer K} ? K : never {
    return obj.id;
    }
    но считаю что мой второй пример плохой ибо проще и лучше сделать без infer

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

    крутяк

  • @Peter-vz4tb
    @Peter-vz4tb 2 года назад +1

    Очень интересно но ничего не понятно.
    А есть где-то более практические задачки. Чтобы можно было запустить и копопаться. На ангуларе например и чтобы все - интерфейсы, женерики, условныте типы.

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

    спасибо за контент, но вы точно фронтенд разработчик? )) у вас оч давно не обновлялся браузер )

  • @user-tp2mn8xz2u
    @user-tp2mn8xz2u 2 года назад

    Только начал познавать TS (входит в стэк куда хочу на работу устроится) и вроде бы все понятно когда работаешь со своими объектами или переменными, но когда с разных api прилетает кто во что горазд, то туплю и не понимаю как описать, вроде понятно что условными типами а толком не могу разобраться(

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

      Если Вы не пишите свой интерпретатор, то Вам этот сахар не нужен.

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

    Не могу понять, зачем писать:
    ```type TryInfer = T extends infer R ? R[keyof R] : never;```
    Если можно просто написать:
    ```type TryInfer = T[keyof T]```
    ???

  • @user-qk1ih4jy5r
    @user-qk1ih4jy5r 2 года назад

    Добрый всем вечер!
    type T = A extends [infer U, 1] | [1, infer U] ? U : never;
    type F = T;
    У F тип 2 | 1
    type T = A extends [infer U, 1] | [1, infer U, infer U] ? U : never;
    type F = T;
    У F тип 2 | 3, но исходя из первого примера должен быть 2 | 3 | 1
    Но это почему-то не так...
    Как вообще понимать такое поведение?

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

      Вы сохраняете 2 и 3 через инфер в U. Из него получается объединение. Все правильно. А первый параметр игнорируется, потому что длина 3, а не 2.

    • @user-qk1ih4jy5r
      @user-qk1ih4jy5r 2 года назад +1

      @@wisejs Не совсем понятно, почему в первом примере тип F 2 | 1, если тогда по идее должно быть 1 | 2...
      И почему в первом примере появляется 1, если кортеж [1, 2] в принципе не может расширить кортеж [infer U, 1]?
      Объясните, пожалуйста, что именно прям в деталях происходит внутри компилятора TS, как он вообще обрабатывает инструкцию A extends [infer U, 1] | [1, infer U] ? U : never
      ?
      Просто в моем понимании если у нас аргументом дженерика попал тип [1, 2], то мы должны той инструкцией проверить, расширяет ли тип [1, 2] тип [infer U, 1] | [1, infer U... Истинность того, что расширяет, вытекает из подтипа [1, infer U], поэтому мы в U записываем 2... А откуда потом берется 1 я прям реально не могу понять... ((

    • @alexandroppolus
      @alexandroppolus 6 месяцев назад

      ​@@user-qk1ih4jy5r первый пример выглядит как баг.

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

    Какой смысл в этой конструкциии: T extends infer U ? . Немного переписал твои примеры для наглядности:
    type GetStatus0 = T extends object ? T extends { status : any} ? T['status'] : null : undefined
    type GetStatus1 = T extends infer U ? U extends { status : any} ? U['status'] : null : undefined
    type Status0 = GetStatus0 // typeOf Status0 - undefined
    type Status1 = GetStatus1 // typeOf Status1 - null, в undefined не свалюсь, какой бы тип не передал кроме never any unknown

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

      Смысл - заставить тайпскрипт распознать тип

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

      ​@@wisejs Смысл - сломать себе мозг)))

    • @alexandroppolus
      @alexandroppolus 6 месяцев назад

      Смысла никакого. Всё то же самое можно проще:
      type GetStatus = T extends {status : unknown} ? T['status'] : undefined;

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

    а зачем бросил канал ???

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

    ничего не понял 🙄

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

      Надо с основ начинать. Такое не сходу поймешь.

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

    чет жесть какая-то, можно пример, где это на практике пригодится?

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

      В видео есть примеры. Это не часто используемый, но полезный функционал. Я, например, постоянно использую ReturnType.

    • @starwalker.odessa
      @starwalker.odessa 2 года назад +9

      Программисты на C# или Java молча наблюдают как TypeScript стреляет себе в ногу ))) С лексической стороны, подобные конструкции это - самое уродливое ООП, которое я когда-либо видел. Тот случай когда костыли становятся просто не читаемыми.

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

      @@starwalker.odessa Каким боком ООП к данным конструкциям?

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

      @@wisejs эти конструкции проявление параметрического полиморфизма в своем самом извращенном варианте

    • @wh1teb1ack92
      @wh1teb1ack92 Год назад +2

      @@starwalker.odessa реально это выглядят как не особенности языка, а реально костыли, которые лучше вообще обходить стороной.

  • @whiteguards43
    @whiteguards43 6 месяцев назад

    По моему без infer легче

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

    jjj

  • @user-mb7kp1bl4w
    @user-mb7kp1bl4w Год назад +2

    Спасибо за видео. Еле-еле разобрался
    Всё что касается условных типов и infer - это какой-то кромешный 3,14здец
    7:40 как вообще такое чудовище читать

    • @olezhonnv3215
      @olezhonnv3215 Год назад +2

      Ты еще Перл не видел, вот там чудовище! Write only code.