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

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

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

  • @ibrmkoibrmko2493
    @ibrmkoibrmko2493 Год назад +4

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

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

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

    • @ТимурХрусталёв-ъ1е
      @ТимурХрусталёв-ъ1е 2 года назад

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

  • @ОлегКолодезев
    @ОлегКолодезев 3 года назад +4

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

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

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

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

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

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

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

  • @ВладимирЛевадный-ц1и

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

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

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

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

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

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

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

    • @Ildar-i3o
      @Ildar-i3o 3 месяца назад +3

      ​@@Script696руль в автомобиле тоже можно ногами крутить, а к педалям приделать палки и давить на них руками, всего лишь надо к этому привыкнуть.

  • @alexperemey6046
    @alexperemey6046 2 года назад +10

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

  • @СофьяИванова-д6ж
    @СофьяИванова-д6ж 2 года назад

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

  • @ТимурХрусталёв-ъ1е
    @ТимурХрусталёв-ъ1е 2 года назад

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

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

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

  • @АнтонСоколов-щ4ю

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

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

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

  • @mrgrd56
    @mrgrd56 2 года назад +7

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

    • @mushroom2267
      @mushroom2267 3 месяца назад +1

      я вообще не понял какая практическая польза от этого

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

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

  • @ГенаПетров-н5ы
    @ГенаПетров-н5ы 3 года назад +1

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

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

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

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

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

  • @EugenePetrov-l6l
    @EugenePetrov-l6l Год назад +3

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

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

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

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

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

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

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

  • @EvgSh-v4x
    @EvgSh-v4x 9 месяцев назад

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

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

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

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

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

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

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

    • @МаксимИсаев-ъ5о
      @МаксимИсаев-ъ5о Год назад +1

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

  • @АлинаЧередниченко-п9ъ

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

  • @oRiGiNaLMrInsaf
    @oRiGiNaLMrInsaf 11 месяцев назад +1

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

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

    Спасибо за infer!

  • @ЭзизК
    @ЭзизК 2 года назад

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

  • @АндрейБ-п4я9н
    @АндрейБ-п4я9н Год назад

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

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

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

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

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

  • @uncle-xxi
    @uncle-xxi 2 года назад

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

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

    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

  • @ВсеволодРусинский
    @ВсеволодРусинский 2 года назад +3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • @habalgarmin
    @habalgarmin 3 года назад +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  3 года назад +1

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

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

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

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

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

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

    крутяк

  • @ПетрБалашенко
    @ПетрБалашенко 3 года назад

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

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

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

  • @МихаилСидоров-ч7я
    @МихаилСидоров-ч7я 3 года назад

    Добрый всем вечер!
    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  3 года назад +1

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

    • @МихаилСидоров-ч7я
      @МихаилСидоров-ч7я 3 года назад +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 Год назад

      ​@@МихаилСидоров-ч7я первый пример выглядит как баг.

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

    Оооо, бомба

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

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

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

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

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

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

  • @АнтонПономарев-ч6б
    @АнтонПономарев-ч6б 6 месяцев назад

    perfect

  • @yaroslav8609
    @yaroslav8609 3 года назад +1

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

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

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

    • @starwalker.musician
      @starwalker.musician 3 года назад +9

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

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

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

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

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

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

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

  • @АлександрСосо-щ1б
    @АлександрСосо-щ1б 8 месяцев назад

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

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

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

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

    jjj

  • @РусланА-ф2н
    @РусланА-ф2н Год назад +2

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

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

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