Улучши свой TypeScript код с помощью Type Guards и Type Assertions

  Рет қаралды 10,308

Ayub Begimkulov

Ayub Begimkulov

Күн бұрын

Пікірлер: 106
@ilyagamepub
@ilyagamepub Жыл бұрын
Парень, годно очень, помогаешь молодым джунам понимать тайпскрипт)
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо за фидбэк!
@tanercoder1915
@tanercoder1915 Жыл бұрын
То что нужно, продвинутый TS контент
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо за фидбэк!
@atlantatesla9348
@atlantatesla9348 3 ай бұрын
Я считала, что неплохо знаю typescript, но смотря твои видео уже сделала пару открытий для себя! Я не знала про function type assertion. А в видео про дженерики я узнала, что функцию type guard можно использовать для сужения key (function hasOwn) Благодарю!
@dmytroz.2084
@dmytroz.2084 Жыл бұрын
Забыл сказать, что на считаные каналы на кого я подписан у меня стоит колокольчик, но Аюб один из них. Жду всегда его видео! Подача улучшается с каждым видео. Растешь, Аюб, отлично! Миксы объяснения с примерами кода от "легких" до "сложных" очень гармонично + мини лайв кодинг.
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо большое!
@АнатолийГорбов-о1ь
@АнатолийГорбов-о1ь Жыл бұрын
какое же полезное видео, периодически пересматриваю)))) СПасибо! реально по ТС. лучший контент на руЮтубе!
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Антон, спасибо больше за фидбэк!
@Илья-в6х5з
@Илья-в6х5з Жыл бұрын
Спасибо большое! Написал свой первый кастомный type guard!)
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Поздравляю!
@АнатолийГорбов-о1ь
@АнатолийГорбов-о1ь Жыл бұрын
Очень интересный контент и подача! Спасибо!
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
не за что!
@tilekmoldaliev7803
@tilekmoldaliev7803 Жыл бұрын
главный фаворитов у кого нужно учиться TS по моему мнению !!! я не новичок в TS, то что показывает юзкейсы на TS пока не видел у других ютюб учителей
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо большое!
@sergei_sergeevu4
@sergei_sergeevu4 Жыл бұрын
Спасибо, за хорошее объяснение важной темы)
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Рад, что понравилось!
@lovikuanyshev
@lovikuanyshev Жыл бұрын
Отличное видео, спасибо Аюб!
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Рад, что понравилось!
@dimasheiko
@dimasheiko Жыл бұрын
Большое спасибо за видео! Очень качественный контент и хорошая подача. Напоминаешь мне Тимура Ulbi. :)
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Рад, что понравилось!
@ЯрославПунтус-г5ц
@ЯрославПунтус-г5ц Жыл бұрын
Все круто. Однозначно ждем больше TS.
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо!
@GitarisT12332
@GitarisT12332 Жыл бұрын
Спасибо тебе Аюб, великолепно объясняешь, открывай патрион, или что-нибудь подобное, с радостью оформлю подписку на регулярные ролики такого плана.
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо! Если открою - дам знать обязательно.
@rustamakhmetyanov4404
@rustamakhmetyanov4404 Жыл бұрын
Спасибо Аюб, как всегда крутое видео, продолжай 👍
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо!
@_oxios_
@_oxios_ Жыл бұрын
Спасибо большое за урок. Мега полезный контент, подача стала огонь
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо!
@kirillpodolinniy309
@kirillpodolinniy309 Жыл бұрын
Аюб, большое спасибо! Смотрю с удовольствием)
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Рад помочь!
@vladimirivanov4756
@vladimirivanov4756 Жыл бұрын
Видел твое интервью годичной давности, тайпскрипт ты подтянул, молодец
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Если интервью на моем канале - то я был собеседующим) А так, спасибо за фидбэк!
@evgenstepanov6319
@evgenstepanov6319 Жыл бұрын
Крутой урок, жду следующего!)
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо!
@Pitbull20121000
@Pitbull20121000 Жыл бұрын
Очень полезно. Ждем следующий урок!
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо, должен скоро выйти!
@vasiapypochkin3241
@vasiapypochkin3241 9 ай бұрын
Spasibo za video!
@huzimuzi4885
@huzimuzi4885 Жыл бұрын
Крутой ролик !
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо!
@ЗамирЮсупов-щ9к
@ЗамирЮсупов-щ9к Жыл бұрын
Привет! Благодарю за видео! а что за магия с "^?" ? ))) это какой-то плагин?
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Да, vscode-twoslash-queries
@aipronator
@aipronator Жыл бұрын
@@ayub_begimkulov разве в этом есть какая то фишка по сравнению с тултипом от vscode при ховере по переменной?
@vadymkononenko685
@vadymkononenko685 Жыл бұрын
Лайк не глядя!! Продолжай больше ТСа! #Typescript #react #javascript #ts #js #it
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо за поддержку!
@DmitryKorovin-rr9hl
@DmitryKorovin-rr9hl Жыл бұрын
Супер, спасибо большое за видео!
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Рад помочь!
@denispepper2830
@denispepper2830 Жыл бұрын
Спасибо, видео оч.полезное!
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Рад, что понравилось.
@raff_m_d6971
@raff_m_d6971 Жыл бұрын
отличное видео
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо!
@ВитяПанчев-к9ю
@ВитяПанчев-к9ю Жыл бұрын
Очень хороший урок, больше спасибо )
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Рад, что было полезно!
@shooterok238236
@shooterok238236 Жыл бұрын
Больше тса!
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Обязательно.
@mercury_2379
@mercury_2379 Жыл бұрын
комментарий в поддержку канала
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо!
@АлександрШальнев-щ8б
@АлександрШальнев-щ8б Жыл бұрын
Супер, больше TS пожалуйста. За такой контент грех не поддержать) Мб оставишь реквизиты в телеге? Думаю, многие бы хотели поддержать и больше мотивировать на крутой контент
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Рад, что понравилось. Я на самом деле не сторонник деньги так собирать, но могу подумать. А так если хочешь поддержать - я думаю коучинг/консультации/менторинг запускать, так как просят часто. Можно таким образом поддержать ну и себе пользу получить)
@АнатолийГорбов-о1ь
@АнатолийГорбов-о1ь Жыл бұрын
контент по тайпскрипту у тебя не имеет равных помоему на руЮтубе)
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо большое!
@Mr.Bellamy
@Mr.Bellamy Жыл бұрын
Годный контент. Хочется в одном из следующих видосов разбор conditional types, особенно мне интересна проверка типов на идентичность. Почему чтобы точно гарантировать идентичность типов включая readonly нужно городить огород типа (() => T extends typeA ? 1 : 2) extends () => T extends typeB ? 1 : 2 ? true : false Мне кажется это очень некрасивым костылем) Или может я чего не знаю и в новых версиях есть более лаконичный способ на идентичность типов? Вроде [typeA] extends [typeB] ? [typeB] extends [typeA] ? true : false : false уже лучше читается и понимается, работает со всем, только не учитываает readonly если оно принципиально
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
На самом деле второй пример еще кейсы с any не учтет, это тоже пробелма. А так да, надо будет разобрать. Спасибо за фидбэк!
@Bugagych
@Bugagych Жыл бұрын
Хороший урок. Нравится манера изложения материала. Все доходчиво. Если будешь записывать какой нибудь проект, обрати внимание на стек React/TS/mobX (MST)/React query/Storybook/Tests - не могу найти все в одном месте, а очень надо.
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо за фидбэк! По стеку - все норм, правда думаю оверкилл иметь mobx и react query в одном проекте. Но это все по ситуации.
@Bugagych
@Bugagych Жыл бұрын
@@ayub_begimkulov Если это так, то вот и хотелось бы пояснения почему. То есть рассмотреть какой то простенький проект с применением этих технологий и пояснить, что лучше еще использовать, а что не использовать.
@promoabys
@promoabys Жыл бұрын
React query не в полной менее, но частично дублирует логику связанную с работой стейт менеджеров. У RQ на сайте есть таблица сравнения с другими популярными инструментами. В остальном всё нормально, на мой взгляд, но использование mobx зависит от проекта и команды
@jamjam3337
@jamjam3337 Жыл бұрын
👍👏
@PowWowVideo
@PowWowVideo Жыл бұрын
Спасибо, а про 'infer' долго ждать :)?
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Зависит от того, что по твоему мнению «долго» ). Я думаю через где-то 2 недели примерно будет, но может и раньше.
@PowWowVideo
@PowWowVideo Жыл бұрын
@@ayub_begimkulov Спасибо. Ждём с нетерпением :)
@knowledgedose1956
@knowledgedose1956 9 ай бұрын
я думаю zod и аналоги решают же похожую проблему, но в рантайме, так вот, было бы интересно узнать мнение, что лучше использовать, условный zod(имхо меньше кода) или тайп гарды и тайп ассершены?
@romanryaboshtan9270
@romanryaboshtan9270 Жыл бұрын
Hi, сто думаешь насчёт zustand и effector??
@kirillpodolinniy309
@kirillpodolinniy309 Жыл бұрын
Аюб, у меня впрос Type Assertions: ты говоришь про кейворд asserts, но чаще встречается someValue или someValue as string. Это все одно и тоже или есть коренные отличия?
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Нет, `as` или `` говорит компилятору о том, что мы сами знаем лучше о том, какой тип у значения. А asserts-фукнция будет выбрасывать ошибку, если тип не соответствуем нашим ожиданиям.
@dmitrydond7795
@dmitrydond7795 2 ай бұрын
Привет! подскажи, а что это за плагин или сеттинга? которая выводит тип, после // ^?
@egorburunkov3842
@egorburunkov3842 Жыл бұрын
у тебя на 9:14 идет две проверки на null и undefined. Можно вместо `value !== undefined & value !== null` написать `value != null` и получить тот же результат
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Да, можно. Но кажется это будет более непонятный код.
@DenisB-d5f
@DenisB-d5f Жыл бұрын
8:35 if (value) отсекает не только null и undefined, а еще boolean, string, number
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
На уровне типизации уберутся только null и undefined. Ну и boolean превратится в true. А string и number так и останутся.
@DenisB-d5f
@DenisB-d5f Жыл бұрын
​@@ayub_begimkulov не согласен, вот я тестирую сейчас: тип у переменной даже в видео показывает {} Если добавить типизацию результата функции, то TS нормально отреагирует только на возврат объекта, значит отсекаются все типы, у которых возможно falsy значение: string, number (и BigInt), null, undefined, boolean. Для меня только непонятно, почему Symbol тоже попадает под гильотину гарда, но я про него почти ничего и не знаю
@DenisB-d5f
@DenisB-d5f Жыл бұрын
function foo(value: unknown): object { if (value) { return value } return {} }
@АнатолийГорбов-о1ь
@АнатолийГорбов-о1ь Жыл бұрын
Аюб привет, а можешь пожалуйста вкратце сказать в чем разница в использовании типов object и Object? нашел инфу но не понял до конца что за тип такой Object с большой буквы который
@АнатолийГорбов-о1ь
@АнатолийГорбов-о1ь Жыл бұрын
все нашел в видео у тебя на канале) спасибо)
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Ага)
@freetimeproject7
@freetimeproject7 3 ай бұрын
6:08 вы представляете какой удар по производительности ф-ии такое число ретурнов? ретурн должен быть один чтоб при оптимизациях в хост среде можно было заинлайнить всю ф-ию. а это создаст дополнительный екзекюшн контекст
@georgegrinding1793
@georgegrinding1793 Жыл бұрын
Не нашел я в документации TS-а ключевое слово asserts. По теме type assertion там используется или дженерик или ключевое слово as. Можешь пояснить?
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
ключевое слово `asserts`, на доку вот ссылка - www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions
@Tvoyamama2009
@Tvoyamama2009 Жыл бұрын
Сладкий
@PoT0P
@PoT0P Жыл бұрын
Не могли бы сделать видео на тему монорепо. Второй день не могу настроить, стек react, nestjs. Хотелось бы папку workspace с 1. react, 2.nestjs, 3.shared-types (types, interface, enums для бека и фронта), 4, shared-components (компоненты для реакта). Если не по теме канала, можно наверно сделать тоже самое но без бекенда. Заранее спасибо.
@CJIu3eHb
@CJIu3eHb Жыл бұрын
Из того, с чем сталкивался. Важно определиться, хочешь ли ты оптимизировать хранение зависимостей (типа хранить общие зависимости в корне, остальное по workspace) или просто нужна возможность подключать "локальные библиотеки" типа shared. С первым можно хлебнуть по полной на тех же простых yarn workspaces. Хотя может я готовить их не умел. Если nest с react и ангуляром еще кое-как упихал с помощью занесения в "nohoist" кучи вспомогательных вещей (eslint, webpack, babel etc), то vue уже в это общежитие не вписался, что-то обязательно где-то ломалось. Но если не париться насчет оптимизации, а просто все занести в "nohoist" - то вполне прошло бы. Также есть такая вещь, как Nx. Вариант попроще - "Package-Based Repos" (похож на простые workspaces с полным разделением зависимостей, но добалены какие-то фишки по управлению этим хозяйством), и вариант посложнее - "Integrated Repos". Я выбрал ради интереса второй, причем в конфигураторе при установке в качестве сборщика выбрал Vite (он был на первой строчке, но по умолчанию почему-то предлагался webpack на второй, и я решил исправить несправедливость). Но видимо, Vite на первой строчке не был выбран по умолчанию неспроста, и пришлось на каком-то этапе переделать монорепо на webpack (были какие-то проблемы с переменными окружения). Ситуация может поменяться, естественно.
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
На самом деле опыт не большой у меня, я работал только с yarn workspaces. Мне их хватило вполне, хотя вот тут человек говорит, что были проблемы у него. Сейчас тулинг вокруг этого сильно улучшился (turborepo, nx и тд.), можно и другие варианты попробовать. В общем, я бы рекомендовал начать с workspaces, если просто шарить нужно типы. Касательно сетапа глянул бы в популярных либах как сделано (точно знаю, что mobx, react, vue юзают). По уроку, я запишу себе, да и так было в планах настроить для одного проекта, но вряд ли прямо в ближайшее время выйдет ролик.
@nade3282
@nade3282 Жыл бұрын
ts с in оператором работает криво. ты в примере пишешь "key" но если использовать не конкретную строку, а переменную, и попытаться использовать ее в качестве ключа для объект будет выдаваться ошибка
@whiteguards43
@whiteguards43 Жыл бұрын
Посмотрел и ничего не полня, почему тайпоф в тс называется тайпгуардом?
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
typeof является тайпгардом, а не называется так. Тайпгард - проверка, которая дает гарантию компилятору, что значения является определенного типа.
@АлександрПлуталов-ъ4ш
@АлександрПлуталов-ъ4ш Жыл бұрын
tipescript итак все ошибки подсвечивает нахрена столько городить?
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
К сложению нет, TS подсвечивает далеко не все ошибки. А иногда считают за ошибку то - что не является таковой. Type guards как раз могут с этим помочь компилятору.
@dmytroz.2084
@dmytroz.2084 Жыл бұрын
пишу что-то...
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Спасибо!
@ИмяФамилия-э4ф7в
@ИмяФамилия-э4ф7в Жыл бұрын
Ты делаешь всё не правильно. Нужно писать не что-то, а что-то для продвижения канала.
@danber1893
@danber1893 Жыл бұрын
Привет, урок хороший, полезный, но скучный. Лично я на 10 минутах уже заскучал и выключил ролик. Лично мне, приятно смотреть ролики до 10 минут, где все чётко и по факту без лишнего, тут ты очень много времени рассказываешь просыте вещи например как работает if и что вернется в итоге и т.д, я думаю человек посмотрит код, и сразу поймет что делает if и как будет выполнен код, твоя задача рассказать сам кейс когда это применять и показать, а остальное это уже другие темы, но это мое мнение кому-томожет нравитсч подобного рода ролики. Спасибо за труд
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Привет. Да, доносить инфу в короткий срок - пока не мой стихия, но буду работать. Спасибо за фидбэк!
@xice111
@xice111 Жыл бұрын
удали редактор кода и иди работать на завод
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
Удали ютуб и иди смотреть телевизор.
@rasfront
@rasfront Жыл бұрын
16:55 здесь можно просто не писать if else а сразу же вернуть результат проверки который находится внутри if😊
@ayub_begimkulov
@ayub_begimkulov Жыл бұрын
)))
Массивы и объекты в TypeScript
26:09
Михаил Непомнящий
Рет қаралды 15 М.
Kluster Duo #настольныеигры #boardgames #игры #games #настолки #настольные_игры
00:47
Flipping Robot vs Heavier And Heavier Objects
00:34
Mark Rober
Рет қаралды 36 МЛН
TypeScript Type Guards Explained
8:43
Software Developer Diaries
Рет қаралды 10 М.
Как я стал профессионалом TypeScript
17:09
Ayub Begimkulov
Рет қаралды 16 М.
Разбираем все utility types в TypeScript
36:32
Ayub Begimkulov
Рет қаралды 6 М.
Context против Redux | Разбираемся что лучше
21:07
MOBX ПРОТИВ REDUX | РАЗБИРАЕМСЯ ЧТО ЛУЧШЕ
35:24