01. TypeScript / Generic and Conditional Type / as const / infer

  Рет қаралды 45,481

IT-KAMASUTRA

IT-KAMASUTRA

4 жыл бұрын

it-incubator.io/education/?ut... - человекоориентированное, честное и профессиональное обучение front-end и back-end разработке гарантированно до трудоустройства за фиксированную стоимость.
TypeScript сложен, а Generic Conditional Type с infer внутри со старта вырывает мозг. Мне вырвал))
Друзья, TypeScript прекрасен. На мой взгляд очень нереально создать большой проект качественно и быстро без TypeScript.
Я сам буду разбираться в сложном TypeScript для того, чтобы вндерять его в продакшен максимально глубоко, и буду рассказывать об этом вам, делясь опытом.
У меня возникла боль: я не хочу в React+Redux для каждого action создавать отдельно type, мало того, я не хочу вручную объединять все эти типы для того, чтобы типизировать итоговый action, который может прилететь в reducer. С этим поможет нам Generic Conditional Type с infer внутри ;)
Статья, о которой речь идёт в видео:
habr.com/ru/company/alfa/blog...
Документация:
www.typescriptlang.org/docs/h...
#infer #typescript #generic #conditional #react #actions

Пікірлер: 168
@ITKAMASUTRA
@ITKAMASUTRA 4 жыл бұрын
Кстати, в конце немного не заметил ошибку, пытаясь зарефаторить вложенность. Итоговый результат: type PropertiesType = T extends {[key: string]: infer U} ? U : never; type GetActionsTypes any}> = ReturnType То есть в типе GetActionsTypes нужно указать ограничение\constraint для передаваемого T, указав, что это ОБЯЗАТЕЛЬНО должен быть объект, у которого в качестве значения св-ва обязательно функция, принимающая что-нибудь и возвращаемая что-нибудь
@hostiseeyou
@hostiseeyou 4 жыл бұрын
почему-то не работает автокомплит в компоненте , если ввожу live, то не ругается, но и не предлагает его (если ввести live232, то вывалит ошибку - тут все ок). Я решал эту задачу иначе export enum AlertStatusEnum { live = 'live', draft = 'draft', } export const ALERT_STATUS_TYPES = { 'state:alert:live': AlertStatusEnum.live, 'state:alert:draft': AlertStatusEnum.draft, }; type StatusType = keyof typeof AlertStatusEnum; Тогда в компоненте работает этот автокомплит - не понимаю почему в Вашем варианте не работает, ведь возвращается абсолютно один и тот же тип (если навести мышкой на status для сравнения что TS возвращает в Вашем и моем варианте)
@hostiseeyou
@hostiseeyou 4 жыл бұрын
моя задача похожа на ту что Вы сначала хотели показать на 29:30, но потом усложнили до объектов
@alexsusha4303
@alexsusha4303 4 жыл бұрын
Может быть можно еще сократить запись до следующего кода: type ActionReturnType = T extends {[key: string]: (...args: any[]) => infer R} ? R : never; type ActionType = ActionReturnType И в reducer определять просто action : ActionType. Хотелось бы узнать, будет ли правильным данный метод? P.s. у меня все отлично работает с ним. P.s. спасибо за видео-урок :)
@MernBNS
@MernBNS 2 жыл бұрын
Димыч, уже почти год, как работаю разрабом после твоего онлайн-курса, и до сих пор продолжаю смотреть и учить новую инфу в удобном формате для себя. Спасибо тебе за твой заряд, которого нет у других ^_^
@lededit9761
@lededit9761 4 жыл бұрын
Димыч, спасибо что расписываешь по порядку от простого к сложному
@goshana1987
@goshana1987 3 жыл бұрын
Крутая тема. Полез по твоему совету в документацию поглубже. Очень кстати оказалось для большого количества actions и типов к ним. Сильно сократил код. Спасибо тебе.
@alexandrmerser8443
@alexandrmerser8443 3 жыл бұрын
Про infer прям очень полезно))) Я все постоянно заморачивался, а как же получить тип, который мы не знаем, но при этом он должен быть переменным, а тут такое простое решение) Прям гуд)
@akionka
@akionka 4 жыл бұрын
10:56 Спасибо, всегда хотел сократить себе жизнь 👍
@MrSvent0vit
@MrSvent0vit 4 жыл бұрын
Хей, осторожнее с такими формулировками ))
@Nick-hq8of
@Nick-hq8of 2 жыл бұрын
Кому сократили, а кому улучшили))
@user-gv3le1rb5k
@user-gv3le1rb5k 4 жыл бұрын
Очень интересный и полезный материал. Спасибо, Димыч, за подробное объяснение!) TypeScript, Infer, типизация actions
@andrewsam224
@andrewsam224 Жыл бұрын
Подход от простого к сложному очень крут. Именно у тебя.
@redcrown5789
@redcrown5789 3 жыл бұрын
Дичайше полезное видео и интересное. Первый раз смотрел когда только только начал знакомство с TS и про infer вообще ничего не понял, сейчас пересмотрел, озарило но обязательно нужна практика=)) Спасибо Димыч, ты как всегда космос))
@disposables72
@disposables72 3 жыл бұрын
Лучшее видео по TS, из всех что я видел! TypeScript, Generic, infer
@dmitrii_gerasimov
@dmitrii_gerasimov 2 жыл бұрын
Классно объяснил Generic. Посмотрел несколько видео других авторов, но не нашёл такого понятного объяснения.
@Erebor99700
@Erebor99700 2 жыл бұрын
Так вот где видос , который внесет ясность , смотрю 2 сезон пути самурая и примерно с 9-10 выпуска перестал понимать , что происходит , а оказывается есть такой видос . Спасибо за труд , бомбим дальше )
@igorieromenko1109
@igorieromenko1109 4 жыл бұрын
TypeScript / Generic and Conditional Type / as const / infer. Спасибо! Всё подробно и понятно, как обычно :)
@user-iz9dz2gh9j
@user-iz9dz2gh9j 3 жыл бұрын
Спасибо большое Димыч! Очень сильно помогаешь с освоением React / typescript
@legendarysergeygaming6395
@legendarysergeygaming6395 4 жыл бұрын
Ну что я хочу сказать то :) Посмотрел все до конца и пошел переделывать свои Action Creators. Круто разложен весь материал по полочкам, не знал что typescript штука такая мощная. Хотя я примерно видел подобное но для меня оставалась загадкой все равно как, зачем и почему. Вообщем спасибо за материал, буду погружаться полностью в TypeScript. Замотивирован на полную.
@ivankomar4227
@ivankomar4227 3 жыл бұрын
Димыч, спасибо за то, что потратил на этой время) реально решил мою боль с Actions
@user-ug1vi3bv1f
@user-ug1vi3bv1f 2 жыл бұрын
Ну ты крутой, Димыч! Жму руку за твой труд, очень сильно помог, благодарю!
@dmytroNaholiuk
@dmytroNaholiuk 3 жыл бұрын
Спасибо!!!!Даже мой кот сидел рядом со мной и смотрел с интересом) TypeScript / Generic and Conditional Type / as const / infer Летим в космос!!!
@alexwake927
@alexwake927 2 жыл бұрын
Спасибо за видео, как всегда все понятно рассказано, боялся generic, не мог понять, спасибо, что все разжевал!
@SemenAlexndrovich
@SemenAlexndrovich 3 жыл бұрын
Спасибо! Ваши уроки бесценны =)
@dmag3287
@dmag3287 2 жыл бұрын
Димыч, на мой взгляд твое видео одно из лучших по TS, Generic, as const, infer
@mrmicolka
@mrmicolka 4 жыл бұрын
Статья была предложена в 6 видео React + Redux + TypeScript, типизация Actions и Thunk. Димыч тогда обещал сделать как в ней. Я ее прочитал и, кроме идеи, нифига не понял. А тут видео с разбором подоспело. Димыч сказал - Димыч сделал! Спасибо)
@zascia100
@zascia100 2 жыл бұрын
С первого раза въехать очень сложно, но действительно магия!
@user-pc9bl7uf1l
@user-pc9bl7uf1l 3 жыл бұрын
Все как всегда на высоте! Благодарю!
@user-ho9iw9si9u
@user-ho9iw9si9u 3 жыл бұрын
Димыч на высоте как всегда! Спасибо. Generic and Conditional Type / as const / infer
@maxkos6184
@maxkos6184 4 жыл бұрын
Самый интересный канал на youtube. Все же я задрот программист наверное. Тема улет. Всегда хотел попробовать ТайпСкрипт ). Спасибо за видос
@user-pz7eq2ed9f
@user-pz7eq2ed9f 2 жыл бұрын
то чувство когда хочешь поставить лайк в конце видоса, а оказывается уже поставил. Качественный контент!
@alekseyberezov8020
@alekseyberezov8020 3 жыл бұрын
Очень крутая тема generic + infer. Например в Redux можно типизировать любое кол-во actios просто на изи. Спасибо Димыч, что разжевал статью Дмитрия Новикова!
@habalgarmin
@habalgarmin Жыл бұрын
наконец-то понял для чего нужен этот infer. Спасибо, Димыч!
@anastasiiamineeva4315
@anastasiiamineeva4315 3 жыл бұрын
Как всегда офигенно! Спасибо огромное!
@4wesome_maks30
@4wesome_maks30 4 жыл бұрын
Офигенный видос,как раз ненравилось то,что постоянно дублирую коду при типизации экшенов.Спасибо!
@xmarsianca
@xmarsianca 2 жыл бұрын
Вчера сама эту же статью нашла,несколько раз прочитала.а сегодня это видео все на свои места всталр
@izzei-1614
@izzei-1614 4 жыл бұрын
Насколько же это крутое видео, я не могу удержаться от восторга))) 01. TypeScript / Generic and Conditional Type / as const / infer IT-KAMASUTRA IT-TYPESCRIPT #infer #typescript #generic
@madden3307
@madden3307 4 жыл бұрын
Здорово! Все понятно и мне пригодилось в своем проекте!
@user-zs7kr6yp2s
@user-zs7kr6yp2s 3 жыл бұрын
ну ты даешь конечно) раскидал все по полочкам, будь здоров брат !
@vb5059
@vb5059 4 жыл бұрын
Спасибо автору! Хороший материал!
@mykhailostepanishchev6472
@mykhailostepanishchev6472 3 жыл бұрын
Димыч самый круто чел ! спасибо ! TypeScript / Generic and Conditional Type / as const / infer
@MJstart
@MJstart Жыл бұрын
Спасибо Димыч. Сложная тема, но ты объяснил отлично
@1want2be3
@1want2be3 3 жыл бұрын
Вообще бомба просто, на одном дыхании
@alekseyisaev6305
@alekseyisaev6305 3 жыл бұрын
огонь! приятненько получать разжеванную инфу)) разбери тему типизирования композиции компонентов в react, плз
@sandorkligan2208
@sandorkligan2208 4 ай бұрын
Спасибо, Димыч! Благодаря тебе разобрался
@user-fx8th7nu8e
@user-fx8th7nu8e 2 жыл бұрын
Классный видос) TypeScript, Generic
@user-je1el3gj9d
@user-je1el3gj9d 4 жыл бұрын
Я очень ждал видео от тебя)
@ITKAMASUTRA
@ITKAMASUTRA 4 жыл бұрын
спасибо!!!
@danilblack8296
@danilblack8296 3 жыл бұрын
TypeScript, Generic, infer, type, Conditional Type. Dimych is the best teacher of the world!
@lededit9761
@lededit9761 4 жыл бұрын
Есть пожелание: оставляй в конце видео чистый отрефакторинный код - так визуально приятно анализировать результат, а так же проще воспроизвести
@user-hk9xk4wd9e
@user-hk9xk4wd9e 3 жыл бұрын
Круто! Спасибо! TypeScript / Generic and Conditional Type / as const / infer
@vd7533
@vd7533 Жыл бұрын
10:56 "Мы сократили и улучшили себе жизнь") эт точно)) Сложная долгая жизнь разраба - это мука)
@Akunov-oy9mx
@Akunov-oy9mx 2 жыл бұрын
Спасибо! Всё подробно и понятно
@RRJxRaiZoR
@RRJxRaiZoR 4 жыл бұрын
Димыч, контент годный. Будь здоров и бомби, бомби, бомби! С меня очередной лойс. По поводу Nullable. В typescript (в версии 2.8) в числе прочих типов был введён тип NonNullable.
@margokomilfo4428
@margokomilfo4428 3 жыл бұрын
NonNullable- это, я понимаю, наоборот - тип, который говорит, что не может быть null.
@user-iz9dz2gh9j
@user-iz9dz2gh9j 3 жыл бұрын
NonNullable не подходит. webstorm не дает никакой подсказки по этому типу/утилите
@dmitriystoyanov933
@dmitriystoyanov933 2 жыл бұрын
Работаю на тайпскрипте 4 месяца, но еще довольно-таки нубас) Этот видос добавил понимания, спасибо!
@user-fr2fd4vj4p
@user-fr2fd4vj4p Жыл бұрын
Спасибо за отличное объсниние TypeScript.
@oconnor4417
@oconnor4417 Жыл бұрын
Димыч ты просто лучший! Добей пожалуйста путь самурая 2.0 !!!❤❤❤
@hasannamazl7584
@hasannamazl7584 4 жыл бұрын
Очень полезно! Спасибо огромное
@2212MG
@2212MG 2 жыл бұрын
Круто, не знал про эти фишки
@goshana1987
@goshana1987 3 жыл бұрын
Спасибо, как всегда очень помогли.
@margokomilfo4428
@margokomilfo4428 3 жыл бұрын
последние минут 7 просто взорвали мозг...=)
@ITKAMASUTRA
@ITKAMASUTRA 3 жыл бұрын
Ага)) и мне)
@sergioostanioni5390
@sergioostanioni5390 3 жыл бұрын
Димыч, привет. Выскажу пару соображений: 1. Шрифт можно и нужно делать крупнее. Первые 15 минут средний вертикальный фрейм экрана пустой. 2. Вложенность типов глубиной более двух уровней усложняет, особенно, когда типизация автоматическая: брат тещи его кума - согласись не просто воспринимается.
@user-il4ph3fr6h
@user-il4ph3fr6h 3 жыл бұрын
спасибо за урок, недавно протипизировал все редюсоры на проекте будучи на 5том уроке второго сезона... Поторопился))) Но руку набил, удачи
@andrewsam224
@andrewsam224 Жыл бұрын
Димыч, очень полезно и спасибо. Может ещё пару видео про фишки с ТS. Будем ждать.
@RainbowJet1
@RainbowJet1 2 жыл бұрын
Очень сложно но очень интересно, спасибо !)
@evgeniysurma8116
@evgeniysurma8116 3 жыл бұрын
класс, как раз пришел к этому видео пытаясь разобрать эту статью на хабре
@kondakov90
@kondakov90 4 жыл бұрын
Забавно, что пару дней назад я тоже эту статью читал ))
@el_marca4987
@el_marca4987 2 жыл бұрын
Димыч, ты все таки очень мегакрут. Никто даже платно так не объясняет, как это делаешь ты.
@vvvkar8449
@vvvkar8449 4 жыл бұрын
Dimich ti krasavchik👍👍👍
@user-yj8qc5so2c
@user-yj8qc5so2c 2 жыл бұрын
Супер! Спасибо!
@4viewsde681
@4viewsde681 4 жыл бұрын
Super Content!
@nikolaykasparov8387
@nikolaykasparov8387 4 жыл бұрын
Заслуженный лойс. В ру сегменте по ts одна шляпа, а это вроде годно.
@domin1c
@domin1c 4 жыл бұрын
Не только в ру. На английском тоже в основном хрень типа "ну вот у нас тут будет строка. Глядите как круто-теперь подсказка есть ололо".
@squabble3332
@squabble3332 2 жыл бұрын
@@domin1c есть такой чувак, Ben Awad, у него довольно годно все по реакту и иже с ним. Сори за рекламу
@user-ux5bp3dg5z
@user-ux5bp3dg5z 4 жыл бұрын
Ууууу, летим!!!!))
@user-jc6xv3oy7b
@user-jc6xv3oy7b 4 жыл бұрын
Воу, только захотел углубиться в TS, а тут целая серия роликов стартовала.
@powerpuff_luv
@powerpuff_luv 3 жыл бұрын
Недолго продлилась правда, ахахах
@nullf192
@nullf192 2 жыл бұрын
Димыч, лучший !
@user-vm3ui3rc8u
@user-vm3ui3rc8u Ай бұрын
спасибо бро что не в реакте, а в тайпскрипте)
@sdd5132
@sdd5132 3 жыл бұрын
ТЫ КРУТОЙ !!
@originalhrysha1976
@originalhrysha1976 4 жыл бұрын
КОНИЧУА! СПС самурай!
@PerryCoxer
@PerryCoxer 2 жыл бұрын
Лучше много кода очевидного, чем мало неочевидного.
@v_korol
@v_korol 2 жыл бұрын
Круто!! #React #Typescript #Generic #asConst
@mediontamginskii5889
@mediontamginskii5889 2 жыл бұрын
Ну за такое не грех подписатся!!!)))
@user-wf8bu6mt2i
@user-wf8bu6mt2i 3 жыл бұрын
Top video!
@kirillpavlovskii8342
@kirillpavlovskii8342 2 жыл бұрын
очень помогло спасибо
@js_talks
@js_talks 4 жыл бұрын
Спасибо большое! Я думаю infer и extend можно было бы использовать для исключения некоторых свойств в зависимости от других. Столкнулся с такой задачей, в зависимости от варианта TextField могут быть доступны или не доступны какие-то пропсы у этого компонента. а вот variant="label_inside_input" может иметь только size="big". Это как перегрузка конструкторов в C# или Java.
@genesismens9898
@genesismens9898 3 жыл бұрын
Теперь всё понятно
@user-gi3sh6ul2j
@user-gi3sh6ul2j 3 жыл бұрын
Спасибо, было полезно). А только две части из этого цикла или продолжение есть?)
@alexbork8659
@alexbork8659 2 жыл бұрын
Супер ......... !!!!!!!!
@anthony_fed
@anthony_fed 2 жыл бұрын
Димыч, Магаспасибо!
@voyvb
@voyvb 2 жыл бұрын
Димыч лучший
@ValarM1
@ValarM1 3 жыл бұрын
Суперполезно
@apodkovyrov
@apodkovyrov 4 жыл бұрын
Еще можно клёво извлекать типы из массива строк. const userNames = ['Dymuch', Valera', 'Vitor'] as const type ArrayValues = T extends ReadonlyArray ? V : never; type UserNames = ArrayValues Мне пригождалось пару раз
@sashahoncharenko1730
@sashahoncharenko1730 2 жыл бұрын
Поддержка от меня в твою копилку )
@asmodeus7862
@asmodeus7862 2 ай бұрын
спасибо скоро оффер ;)
@user-nw5br5jg9k
@user-nw5br5jg9k 2 жыл бұрын
Огонь
@araikrasoyan702
@araikrasoyan702 2 жыл бұрын
Спасибо
@uaplatformacomua
@uaplatformacomua 2 жыл бұрын
В самых первых примерах кода типа type UserType - Type избыточно, достаточно просто type User
@mr.rodrigo979
@mr.rodrigo979 2 жыл бұрын
31:06 - Это я на собесе )) К слову, можно и так написать: type SomeType= typeof obj[keyof typeof obj];
@Vllad_Ko
@Vllad_Ko 4 жыл бұрын
Ух, не простая тема! Димыч молодец объяснил хорошо. Такой вопрос возник, generic это такое подобие настраиваемой динамической типизиции, или infer, или оба?
@AndranikArshakyan
@AndranikArshakyan 2 жыл бұрын
полезно
@user-lq5fs9eb8v
@user-lq5fs9eb8v 4 жыл бұрын
Там ксати в той статье по ссылке, в одном из комментариев есть ссылка на библиотеку Unionize. Не пробовал еще, бегло глянул. выглядит интересно для объединения экшенов
@Vlad-us9xt
@Vlad-us9xt 2 жыл бұрын
top)
@whicencer8819
@whicencer8819 3 жыл бұрын
5:11 Уже сам мозг намикает, что нужно больше видео по реакту)))
@technical777
@technical777 4 жыл бұрын
Димыч спасибо за урок. Тема сложная, пока для меня не понятная, но буду пробовать перепиливать соц сеть с курса React JS путь самурая в TS. Есть вопрос, как применять www.npmjs.com/package/eslint-plugin-react, и github.com/prettier/eslint-config-prettier и как оно все связано с TS ?
@gaben-agent
@gaben-agent 3 жыл бұрын
Удачи ребят) 19:19
@carbon4ik988
@carbon4ik988 10 ай бұрын
Жду видос по декораторам, вообще не понимаю юзабельность параметров которые приходят в декоратор
TypeScript generics или универсальный типы, обобщения
23:51
Михаил Непомнящий
Рет қаралды 33 М.
Infer is easier than you think
13:38
Matt Pocock
Рет қаралды 85 М.
Универ. 13 лет спустя - ВСЕ СЕРИИ ПОДРЯД
9:07:11
Комедии 2023
Рет қаралды 4,6 МЛН
Hot Ball ASMR #asmr #asmrsounds #satisfying #relaxing #satisfyingvideo
00:19
Oddly Satisfying
Рет қаралды 46 МЛН
Khóa ly biệt
01:00
Đào Nguyễn Ánh - Hữu Hưng
Рет қаралды 13 МЛН
We Got Expelled From Scholl After This...
00:10
Jojo Sim
Рет қаралды 41 МЛН
Фишки TypeScript о которых ТЫ НЕ ЗНАЛ!
30:55
Learn TypeScript Generics In 13 Minutes
12:52
Web Dev Simplified
Рет қаралды 221 М.
Typescript. Работа со страхом новичка на примере Generics
21:59
TypeScript Generics are EASY once you know this
22:21
ByteGrad
Рет қаралды 124 М.
Универсальная токарная головка
15:42
HeARTwood
Рет қаралды 5 МЛН
Универ. 13 лет спустя - ВСЕ СЕРИИ ПОДРЯД
9:07:11
Комедии 2023
Рет қаралды 4,6 МЛН