На 24 минуте (Utility Types) при объявлении типа с таким же набором полей как у одного из полей интерфейса, как альернативный вариант записи можно просто записать type Birthday = User['birthday'], тогда конструкция valueOf не потребуется и читабельность будет чуть проще. Спасибо за видео!
это проблема TS. почти любой тип можно описать почти бесконечным количеством вариантов. И никто не знает всех лучших вариантов ) я не знаю ни одного настоящего синьора в TS. Все постоянно в поиске. И это дико. Дико, что TS втыкается в 90% проектов, но никто не умеет в него нормально )
По поводу enum: они бывают не только строковые, ещё и числовые - хотя в рантайме это просто число, но на этапе разработки ты можешь писать не === 1, а что-нибудь имеющее смысл. И зачем они нужны: 1. Чтобы не использовать строки в коде, и чтобы не было соблазна их повторять 2. Чтобы обрабатывать входящие данные: у меня на проекте есть типы газоанализаторов, и приходят они как число 0-255, а на фронт нужно отдать название. Здесь помогли 2 enum - числовой и строковый
Было бы круто посмотреть видео про микрофронтенд. Условно - есть базовый Шелл, в котором есть базовый роутинг. И каждый роут это отдельный сервис, который прописан в ремоутс
как меня триггерят такие темы :) микрофронты -- это решение, когда полный бардак в конторе надо как-то спасать. Микрофронты -- это приговор, когда всё просрали имхо
27:43 Если нужно добавить один дженерик в функцию и нет необходимости экстендить его от чего-то, то можно просто добавить запятую: В таком виде это уже не будет JSX, а будет именно дженерик. И это актуально только для .tsx файлов, в .ts файлах с этим проблем нет.
Быстрые гайды офигенно заходят!) Правда слушаю на 1.75, поэтому они прям супер быстрые)) Материал полезный, даже если все знаешь, лишний раз повторишь. Спасибо за труды!
12:50 если надо, чтобы функция принимала стоки, которые относятся к enum, нужно в качестве аргумента функции указать ‘${UserRole}‘. Функция пропустит и enum значения как UserRole.Admin, так и "admin"
По сути, все что показано в данном видео это вспомогательные инструменты ТС. Это не обязательно использовать но надо знать, по тому что эти инструменты помогают писать код таким образом, чтобы предотвращать не корректный код. Если интересно, почитай про тайп гарды, анкноун и Невер. Всякие енамы, как по мне, не нужны. Они просто побыстрее работают
Повелся на клик-бейт. Долго ждал момента провала. В итоге тебе вручили оффер 😁 Я уже 2 собеса прошел: обещали дать обратную связь через 1-2 недели. В итоге никто не пришел на фан-встречу. Первый собес у меня в городе - просто поболтал с руководителем. Второй собес в Москве (по телемосту сдавал) - были алгоритмы: попалась задача на бинарный поиск. Я в шоке был, что спустя год учёбы в универе в голове хоть что-то отложилось.
На 23:50 можно вытянуть тип Birthday гораздо проще. У TS есть синтаксис доступа к типу по индексу, и выглядит это так: type BirthDay = User['birthDay'] И не нужны ни Pick, ни ValueOf.
1 кейс что пришел на ум, когда ты используешь не константный объект а через ValueOf получаешь типы и потом используешь строки или что там в readonly то если надо заменить значение ты будешь бегать по проекту и менять занчения везде, если же использоать константный объект (импортировать его да) то значение нужно заменять в одном месте
@@UlbiTV если надо достать тип значений из нескольких полей, то как раз пик тут лишний, по прежнему можно несколько ключей перечислить: TypeNameWithBirthday['id' | 'age' | 'birthday'] Пик всё же как раз для создания нового объекта с некоторыми старыми ключами и изначальными типами ключей. Доставать через него значение нелогично.
Интересные фишки, спасибо) 20:40 пример не совсем корректный, когда мы делаем объект константой _obj as const_ , то мы его поля не сможем изменить, а в функцию мы передаем аргументом объект с похожим типом и он никак не связан с obj. То есть ТС только проверяет на соответствие типов параметра и аргумента, а не логику внутри функции. 23:30 пример для Extract лучше с доки _type T0 = Extract;_ по простому это как пересечение. В твоём примере непонятно зачем указывать union, который и получаем.
Привет, я давно смотрю твои видео, очень интересный контент, нравится твоя манера говорить и способность вести диалоги. Ты в каком-то видео говорил, что для начинающих программистов крайне важно попасть на хорошую работу, с хорошим начальником и коллективом, и я хотел бы узнать твое мнение, я очень начинаешь бэкэндер и фронтэндер, учился по разным курсам в интернете и твоим видео, подтянул JS, HTML и CSS, наконец-то подвернулся вариант с работой, которую долго искал, и согласился на первый же вариант, и тут началось: рамках обучения мне дали задание сделать фулстек проект, разработать приложение для ведения реестра, с базой данных на 10 таблиц, с 15000 строк, осуществить все в laravel при помощи php, сказали: ну делай, а теперь спустя небольшое время, начинается возмущение, что я медленно делаю и ничего не успеваю, сижу просто учусь. И я не знаю, так и должно быть, и это я правда медленно развиваюсь или все же должна быть какая-то помощь? Очень интересно твое мнение, буду рад, если ты ответишь, заранее больше спасибо P.s. я тоже закончил РТУ МИРЭА в 2021)
По поводу первого случая, не нужно делать функцию, это лишнее. Можно просто написать const _: never = car.brand, и TS будет ругаться, если мы попадет в дефолт.
У разработчиков есть скрытый сервис со списком актуальных фичей?) Вчера только подобное видел у малоизвестного ютубера, но все равно рад, что смог еще раз пересмотреть у тебя
Видос просто 🔥. Можно такого больше? ☺️ В конце про дженерики - это прям топ, как раз на днях увидел это в курсе и сразу понял тут, как это фиксить. А еще функцию онЧенч внутри селекта можно переписать через опшионал ченинг, что сделает ее чуточку короче.
Слушай совет для видео, сделай ролик в котором ты как уже прошаренный программист испытываешь чатGPT , я просто планирую через него обучатся и хотел бы понимать что он может и может ли вообще
Как я понял, энамы лучше обычных юнионов тем что значениям можно давать более читабельные имена и при рефакторинге даже если где-то есть пересекающиеся строковые значения в разных энамах, при переименовывании чужие значения затронуты не будут.
Тимур привет, у меня давно в голове висит вопрос про conditional конструкцию. type Aboba = T extends string ? Abo : Ba, как по мне, как-то не очень вяжется если читать эту строку как "... если тип Т расширяет тип стринг, то ...", что мы расширяем?, как мы можем расширить все великое множестово всевозможных строк еще одной частной строкой, какя-то дичь? Возможно для англоговорящих такая последовательность очевидна, но я лично долго не мог вдуплить шо вообще происходит тупа из-за формулировки. Что думаешь на сей счет?
Думаю, можешь добавить Module Augmentation, помогает когда нужно расширить тип из либы, чтобы, например подмешать свое данные в аргументы какого-то метода из либы
На 24 минуте (Utility Types) при объявлении типа с таким же набором полей как у одного из полей интерфейса, как альернативный вариант записи можно просто записать type Birthday = User['birthday'], тогда конструкция valueOf не потребуется и читабельность будет чуть проще.
Спасибо за видео!
это проблема TS. почти любой тип можно описать почти бесконечным количеством вариантов. И никто не знает всех лучших вариантов ) я не знаю ни одного настоящего синьора в TS. Все постоянно в поиске. И это дико. Дико, что TS втыкается в 90% проектов, но никто не умеет в него нормально )
Пили ещё. Не затянуто, познавательно, хотелось бы увидеть, весь список подобных лайфхаков которые ты перечислил в видосе.
Ulbi, красавчик! Можно вот этого вот побольше?
Хахах, знакомые слова)
Контент в кайф!
@@MrTruth-rc2fr Это ЧатГПТ (подмигивает)
чтобы вы еще хотели ? думаю ради вас все будет!!!
@@anatoliiilescu839 Порядочные люди знают, что здесь не стол заказов. Но ради продвижения ролика было бы хорошо устроить срач в комментах.
Да, это здоровский формат! Быстрая иньекция новой информации, каждый день по 30 мин и уже будешь знать больше чем многие колеги!
Очень интересно, большую часть знал, но пара пригодится точно. Очень интересно о каких ещё приёмах ты бы мог рассказать
Братан, хорош, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?
Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?
ахахахах а ты харош)
Узнал новое, не смотря на то, что с ТС давно на ты
Спасибо!
По поводу enum: они бывают не только строковые, ещё и числовые - хотя в рантайме это просто число, но на этапе разработки ты можешь писать не === 1, а что-нибудь имеющее смысл.
И зачем они нужны:
1. Чтобы не использовать строки в коде, и чтобы не было соблазна их повторять
2. Чтобы обрабатывать входящие данные: у меня на проекте есть типы газоанализаторов, и приходят они как число 0-255, а на фронт нужно отдать название. Здесь помогли 2 enum - числовой и строковый
Было бы круто посмотреть видео про микрофронтенд.
Условно - есть базовый Шелл, в котором есть базовый роутинг. И каждый роут это отдельный сервис, который прописан в ремоутс
как меня триггерят такие темы :) микрофронты -- это решение, когда полный бардак в конторе надо как-то спасать. Микрофронты -- это приговор, когда всё просрали имхо
@@ixplo ну да, не могу представить кейс, когда такое говно реально нужно применять
@@parabellum577 кейсы есть, но почти всегда за сопоставимое вложение ресурсов можно сделать что-то другое, что не повлияет на качество продукта
27:43 Если нужно добавить один дженерик в функцию и нет необходимости экстендить его от чего-то, то можно просто добавить запятую:
В таком виде это уже не будет JSX, а будет именно дженерик. И это актуально только для .tsx файлов, в .ts файлах с этим проблем нет.
Как же хорошо, что я не использую react в своих проектах
@sjdjjsjsjs3991 странно гордиться своими недостатками.
Быстрые гайды офигенно заходят!) Правда слушаю на 1.75, поэтому они прям супер быстрые)) Материал полезный, даже если все знаешь, лишний раз повторишь. Спасибо за труды!
Спасибо огромное! Действительно, без всякой воды. Сразу видно технический подход и понятный даже для гуманитария
12:50 если надо, чтобы функция принимала стоки, которые относятся к enum, нужно в качестве аргумента функции указать ‘${UserRole}‘. Функция пропустит и enum значения как UserRole.Admin, так и "admin"
это какой то п**дец. Я еле еле что то вкурил. И я понял что надо учиться и учиться. Тимур ты реально крут. Спасибо тебе❤❤
По сути, все что показано в данном видео это вспомогательные инструменты ТС.
Это не обязательно использовать но надо знать, по тому что эти инструменты помогают писать код таким образом, чтобы предотвращать не корректный код. Если интересно, почитай про тайп гарды, анкноун и Невер.
Всякие енамы, как по мне, не нужны. Они просто побыстрее работают
@@dmitrykabanov9458 Я обязательно займусь этим но позже. Мне очень сложно это воспринимать так рано:)
Какой же офигенный видос. Спасибо большое за материал
Повелся на клик-бейт. Долго ждал момента провала. В итоге тебе вручили оффер 😁
Я уже 2 собеса прошел: обещали дать обратную связь через 1-2 недели. В итоге никто не пришел на фан-встречу. Первый собес у меня в городе - просто поболтал с руководителем.
Второй собес в Москве (по телемосту сдавал) - были алгоритмы: попалась задача на бинарный поиск. Я в шоке был, что спустя год учёбы в универе в голове хоть что-то отложилось.
На 23:50 можно вытянуть тип Birthday гораздо проще. У TS есть синтаксис доступа к типу по индексу, и выглядит это так:
type BirthDay = User['birthDay']
И не нужны ни Pick, ни ValueOf.
так его valueOf по сути тоже самое
Супер видео! буду ждать продолжения и по тайпскрипту и по другим темам! отличный формат!
Лаконично и ёмко, хорош, давай еще)
Ещё не досмотрел, но уже заходит, крутой ролик
Бро давай побольше TS, он сейчас везде просто нужен )) Ну и фишки ванильного JS тоже хотелось бы узнать))
Супер! Давай больше о TS, backend, web3!
1 кейс что пришел на ум, когда ты используешь не константный объект а через ValueOf получаешь типы и потом используешь строки или что там в readonly то если надо заменить значение ты будешь бегать по проекту и менять занчения везде, если же использоать константный объект (импортировать его да) то значение нужно заменять в одном месте
Про тайпгарды понравилось. Хороший пример
Нижайший поклон добрый человек! Очень понравилось! knowledge sharing в массы
В примере где с помощью ValueOf берём тип birthday можно просто взять TypeNameWithBirthday['birthday']
Справедливо, если нужно одно поле, пиком можно несколько цепануть
@@UlbiTV если надо достать тип значений из нескольких полей, то как раз пик тут лишний, по прежнему можно несколько ключей перечислить:
TypeNameWithBirthday['id' | 'age' | 'birthday']
Пик всё же как раз для создания нового объекта с некоторыми старыми ключами и изначальными типами ключей. Доставать через него значение нелогично.
Спасибо, узнал о моментах, о которых не догадывался. Спасибо, очень полезно!
Как всегда годный контент. React, Typescript форева😂
Добрый день. Спасибо Вам огромное. А существует курс по TS для новичков в Вашем формате? Вы просто идеально информацию преподносите.
Спасибо тебе большое за такие познавательные видео!!!!!!! Как всегда по полочкам
Пару новых штуковин узнал. Спасибо
Батя, контент топчик, наваливай ещё!
1.5 года работаю с TS.
Дофига нового)
Как всегда коротко и по делу, очень полезное видео!
Спасибо за видео, очень полезно. Хотелось бы видеть больше таких видео
Спасибо! Круто! Норм формат!
Всё, что нужно, в одном месте, быстро и понятно 💣💥
Интересные фишки, спасибо)
20:40 пример не совсем корректный, когда мы делаем объект константой _obj as const_ , то мы его поля не сможем изменить, а в функцию мы передаем аргументом объект с похожим типом и он никак не связан с obj. То есть ТС только проверяет на соответствие типов параметра и аргумента, а не логику внутри функции.
23:30 пример для Extract лучше с доки _type T0 = Extract;_ по простому это как пересечение. В твоём примере непонятно зачем указывать union, который и получаем.
Привет, я давно смотрю твои видео, очень интересный контент, нравится твоя манера говорить и способность вести диалоги. Ты в каком-то видео говорил, что для начинающих программистов крайне важно попасть на хорошую работу, с хорошим начальником и коллективом, и я хотел бы узнать твое мнение, я очень начинаешь бэкэндер и фронтэндер, учился по разным курсам в интернете и твоим видео, подтянул JS, HTML и CSS, наконец-то подвернулся вариант с работой, которую долго искал, и согласился на первый же вариант, и тут началось: рамках обучения мне дали задание сделать фулстек проект, разработать приложение для ведения реестра, с базой данных на 10 таблиц, с 15000 строк, осуществить все в laravel при помощи php, сказали: ну делай, а теперь спустя небольшое время, начинается возмущение, что я медленно делаю и ничего не успеваю, сижу просто учусь. И я не знаю, так и должно быть, и это я правда медленно развиваюсь или все же должна быть какая-то помощь? Очень интересно твое мнение, буду рад, если ты ответишь, заранее больше спасибо
P.s. я тоже закончил РТУ МИРЭА в 2021)
Ещё офигенная вещь это inner. Для динамических типов это просто незаменимая вещь.
Коммент в поддержку) как всегда все круто!
Крутые ролики у тебя, смотрю и практикуюсь) !спасибо!
крутяк!
Заскринил некоторые моменты, записал в "заметки"
Реакт и js такого формата очень жду
Круто, очень много нового узнал.
Круто, спасибо. Можно вот этого вот почаще
Классное видео.Очень зашёл такой контент
Топ, испытываю проблемы с тс постоянно, с подобным контентом становится проще!
Вперёд братан, контент в кайф! 👍👏🔥
Очень заходит! Понравится всем, спасибо большое!
формат огонь. можно ли погрузиться глубже в дженерики с след видео ?
Супер, надеялся еще на MappedTypes посмотреть, по ним видосик будет?)
Привет! в первом примере надо возвращать результат функции never чтобы вычисляемый тип значения был правильный (а то иначе туда добавится undefined)
Очень полезно! Хочется еще подобный контент с фишками💥
Очень круто, но надеюсь ты сделаешь всё-таки видео по react query.
Тимур это прям очень полезное видео)) спасибо
Интересные нюансы, благодарю!
Действительно интересные приемы которые хотелось бы попробовать в деле.
Спасибо за полезное видео
По поводу первого случая, не нужно делать функцию, это лишнее. Можно просто написать const _: never = car.brand, и TS будет ругаться, если мы попадет в дефолт.
Есть ещё проще вариант на 4.9+ версии: car.brand satisfies never;
@@BOCbMOU Огонь! Не знал что такое есть
Очень круто и полезно! Не знал про Exclude)
Больше таких роликов !
Просто супер! Полезного было достаточно, что приятно
Спасибо за ролик!
круто!!
Очень круто!!! Спасибо
круто, нужны еще такого плана видосы!
Больше type script & react & redux, please! Я знаю что есть много на канале про это но еще хочется
Оч интересно, контент топ, идея топ
У разработчиков есть скрытый сервис со списком актуальных фичей?) Вчера только подобное видел у малоизвестного ютубера, но все равно рад, что смог еще раз пересмотреть у тебя
Спасибо, довольно полезный контент
Тимур, спасибо большое. Очень полезное видево!)
стильно, модно, молодёжно. Давай ещё.
очень интересный обзор!
спасибо большое!
Видос просто 🔥.
Можно такого больше? ☺️
В конце про дженерики - это прям топ, как раз на днях увидел это в курсе и сразу понял тут, как это фиксить.
А еще функцию онЧенч внутри селекта можно переписать через опшионал ченинг, что сделает ее чуточку короче.
Интересная тема по поводу типизированых переиспользуемых компонентов. Наткнулся на много проблем типизации от создании темы до типизации пропсов.
Суперр! Огромное спасибо!
Спасибо за твой труд! ❤
Твои видео очень полезные 👍
хочу собеседования ! но любой контент твой хорош
Спасибо, на 1.25 смотрится отлично)
Тимур, спасибо! 👍
Круто, продолжай)
контент топ, продолжай
Круть. А о декораторах можешь рассказать?
Слушай совет для видео, сделай ролик в котором ты как уже прошаренный программист испытываешь чатGPT , я просто планирую через него обучатся и хотел бы понимать что он может и может ли вообще
Лайков - 10% от просмотров - офигенный контент!
Как я понял, энамы лучше обычных юнионов тем что значениям можно давать более читабельные имена и при рефакторинге даже если где-то есть пересекающиеся строковые значения в разных энамах, при переименовывании чужие значения затронуты не будут.
Супер!
Спасибо большое! Боже я только что узнал то что я зря мучился целый день
Больше такого контента!!!! Пожалуйста!!!
Подскажите на каком сайте лучше всего изучать javascript, или возможно есть какие-нибудь толковые курсы?
очень полезно, спасибо
The best russian bloger
Тимур привет, у меня давно в голове висит вопрос про conditional конструкцию. type Aboba = T extends string ? Abo : Ba, как по мне, как-то не очень вяжется если читать эту строку как "... если тип Т расширяет тип стринг, то ...", что мы расширяем?, как мы можем расширить все великое множестово всевозможных строк еще одной частной строкой, какя-то дичь? Возможно для англоговорящих такая последовательность очевидна, но я лично долго не мог вдуплить шо вообще происходит тупа из-за формулировки. Что думаешь на сей счет?
T extends (относится к типу/является подтипом/входит в группу типа) string
Можешь пожалуйста сделать подробный ролик про TS начиная с основ, с твоей подачей будет бомба!
Полезно, рубрика классная
strapi сделай бро! :)
Было бы хорошо если сделал видосики как Michigan TypeScript по ts
Атак все твои видео прям топпп!!!
Как обычно контент в кайф
Супер, спасибо. Очень интересно и полезно!
Думаю, можешь добавить Module Augmentation, помогает когда нужно расширить тип из либы, чтобы, например подмешать свое данные в аргументы какого-то метода из либы