Условные Типы TypeScript / Infer / Conditional Types
HTML-код
- Опубликовано: 19 дек 2021
- Условные Типы (Conditional Types) позволяют использовать тернарные операторы в работе с типами. Ключевое слово infer внутри условных выражений используется для распознавания типа.
Приятного просмотра! Буду благодарен за поддержку в виде комментария и лайка!
👉 Поддержка канала: / wisejs
✔️ Если хочешь изучать программирование со мной, не забудь подписаться :)
ruclips.net/channel/UCOxq...
✔️ Мой телеграм канал: t.me/joinchat/RVq-cmt6n1SJRS7Z
#typescript #тайпскрипт #урокитайпскрипт #infer
Вот именно эти вещи в ТС я и считаю дичью!
Нечитабельно, какие-то условия в условиях, на генериках, с кучей скобочек - оверинжиниринг с типами.
Надо долго в это вникать, и научиться читать такие вложенности.
И тут еще просто))) Я такие выкрутасы видел на ТС, чтомозг плавится.
хотел написать коммент, но ты опередил)
Со временем ты станешь лучше к этому относиться
Когда то и reduce вызвал к сложности, правда?
Материал очень интересный и хорошо подаётся! Огромная благодарность за труд!
8:38
а тут я не понял зачем ты использовал `T extends infer U ? ...`
почему бы просто не написать:
type GetStatus = T extends {status: any} ? T['status'] : null;
есть какая-то разница разве?
Банальное озвучивание справки... главное так и не озвучено: практическое применение. Где и когда это может понадобиться? Для чего используется?
Спасибо большое, ты просто лучший. Несколько дней не мог понять что такое infer и зачем он нужен, кучу всего перечитал до этого. А тут меньше 10ти минут и до меня наконец-то дошло это и не только
То же самое. Несколько раз читал докуму, периодически к ней возвращаясь, но так и не мог понять с этим infer... А тут всё доходчиво и понятно
Супер,лаконично и информативно,большое спасибо ! Условные типы,TypeScript, Infer, Conditional Types.
спасибо за поддержку))
Спасибо, ибо это действительно сложно, мало где понятно и коротко объяснено, "спрашиваемо" на собесах, видано в кучках популярных либ, но не особо "используемо"))))))))) 👍👍👍👍👍👍👍👍👍👍👍👍👍👍
Вот такие видео нужны на Ютубе, спасибо!
Спасибо за поддержку!
Спасибо автору. Лучшее объяснение из всех, что видел. Человек понимает, что говорит.
Помнится были функции коротенькие и понятные. Но появился тайпскрипт и эти функции разрослись до 5 страниц. Но багов меньше нестало)
Да, это правда.
И это было охуенно! Приправил где нужно jsdoc и профит. Теперь кроме багов в коде еще и фиксить баги в типах, которые высосанные из пальца и пока проберешься среди дебрей дженериков, забудешь и логику кода, которой выходит иногда меньше, чем типов.
Infer, typescript, conditional types - спасибо за примеры
Отличный урок, спасибо за труд!
Братче, ты просто красава! Всё доходчиво и понятно, мне не хватало этого видео
Топ! Спасибо огромное автору!
Незаслуженно мало подписчиков, материал реально годный) Infer, conditional types - огонь ))
работаю с тайп скриптом месяцев 5, но такую навороченную жесть пока не умею писать) Максимум самые простые дженерики, Пики, Омиты, Экстенды и т.д.
Я тоже месяц назад начал учить его, как ты говоришь эти моменты понятны а так как автор делает конечно сам сразу не додумаешься. И вообще тс призван облегчить жизнь разрабам, а в итоге я голову ломаю)))
@@777KoroL777 Ага, потому что ТС - дичь!
@@777KoroL777 сначала ты работаешь на TS, потом TS работает на тебя)
Спасибо. Полезно когда нет возможности получить типы, но хочется полной типизации
Отлично объяснил.
молодец, не забывает язычок трубочкой сворачивать, когда иностранные слова произносит!
Всё доходчиво👍
крутое видео, спасибо большое. жаль, что больше не снимаете(
лучшие уроки на ютуб, что я находил
Круто, не знал о таких фишках)
Хорошо рассказал про TypeScript Infer Conditional Types
Спасибо за infer!
Респект за условные типы, все понятно. Но infer очень сумбурно объяснил, я все еще не понял, что именно оно делает, и как и зачем )
Действительно классный канал, очень понятно объясняешь. Подписчиков мало. Надеюсь в какой то момент выстрелит. Спасибо!
спасибо за infer, закрепил
Оооо, бомба
В примере с TryInfer, зачем вообще infer? Можно напрямую получить тип как T[keyof T], разве нет?
Какая-то черная магия. Надо вникать. :)
Не очень понял infer на примере
type GetStatus = T extends infer U ? U extends {status: any} ? U['status'] : null : null;
Чем это отличается от просто?
type GetStatus = T[keyof T];
отличные видео по typescript у тебя, а можешь плиз запилить видео react с typescript
Кажется, таких видео уже десятки. Что именно интересно?
👉 Этот комментарий создан в качестве уважения автору и для продвижения его канала.
Хорошие видосы, но мало!
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
крутяк
Очень интересно но ничего не понятно.
А есть где-то более практические задачки. Чтобы можно было запустить и копопаться. На ангуларе например и чтобы все - интерфейсы, женерики, условныте типы.
спасибо за контент, но вы точно фронтенд разработчик? )) у вас оч давно не обновлялся браузер )
Только начал познавать TS (входит в стэк куда хочу на работу устроится) и вроде бы все понятно когда работаешь со своими объектами или переменными, но когда с разных api прилетает кто во что горазд, то туплю и не понимаю как описать, вроде понятно что условными типами а толком не могу разобраться(
Если Вы не пишите свой интерпретатор, то Вам этот сахар не нужен.
Не могу понять, зачем писать:
```type TryInfer = T extends infer R ? R[keyof R] : never;```
Если можно просто написать:
```type TryInfer = T[keyof T]```
???
Добрый всем вечер!
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
Но это почему-то не так...
Как вообще понимать такое поведение?
Вы сохраняете 2 и 3 через инфер в U. Из него получается объединение. Все правильно. А первый параметр игнорируется, потому что длина 3, а не 2.
@@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 я прям реально не могу понять... ((
@@user-qk1ih4jy5r первый пример выглядит как баг.
Какой смысл в этой конструкциии: 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 Смысл - сломать себе мозг)))
Смысла никакого. Всё то же самое можно проще:
type GetStatus = T extends {status : unknown} ? T['status'] : undefined;
а зачем бросил канал ???
ничего не понял 🙄
Надо с основ начинать. Такое не сходу поймешь.
чет жесть какая-то, можно пример, где это на практике пригодится?
В видео есть примеры. Это не часто используемый, но полезный функционал. Я, например, постоянно использую ReturnType.
Программисты на C# или Java молча наблюдают как TypeScript стреляет себе в ногу ))) С лексической стороны, подобные конструкции это - самое уродливое ООП, которое я когда-либо видел. Тот случай когда костыли становятся просто не читаемыми.
@@starwalker.odessa Каким боком ООП к данным конструкциям?
@@wisejs эти конструкции проявление параметрического полиморфизма в своем самом извращенном варианте
@@starwalker.odessa реально это выглядят как не особенности языка, а реально костыли, которые лучше вообще обходить стороной.
По моему без infer легче
jjj
Спасибо за видео. Еле-еле разобрался
Всё что касается условных типов и infer - это какой-то кромешный 3,14здец
7:40 как вообще такое чудовище читать
Ты еще Перл не видел, вот там чудовище! Write only code.