Канал тотальной годноты, по своей ценности очень похож на ulbi tv, уровень экспертности автора поражает, да, здесь есть чему поучиться middle разрабам!!!
У тебя отличный контент, спасибо! Но, кажется, чтобы понять in/out, стоило рассказать про вариантность. in/out явно указывают вариантность. Вариантность это один из механизмов с помощью которого компилятор понимает совместимы типы или нет. Всего 4 вида вариантности. Нас интересуют сейчас 2 из них. 1) ковариантность - если ожидаем родительский класс, то можно присвоить и класс потомок 2) контравариантность - если ожидаем родительский класс, то нельзя присвоить класс потомок. Но можно присвоить класс, который предок родительского Даны классы class Animal { public name = ''; } class Bird extends Animal { public fly() {} } class Crow extends Bird { public caw() {} } const somebody1: Animal = new Animal(); // можно присвоить также new Bird() и new Crow() const somebody2: Bird = new Bird(); // можно присвоить также new Crow() const somebody3: Crow = new Crow(); // сюда больше ничего нельзя присвоить кроме Crow Это примеры ковариантности. В ts везде кроме параметров функций используется ковариантность. В параметрах функций контравариантность. Пример контравариантности: type F = (s: Bird) => boolean const someFunction1: F = (s: Animal) => true // ok const someFunction2: F = (s: Bird) => true // ok const someFunction3: F = (s: Crow) => true // ERROR! Типы не совместимы На первый взгляд это может показаться странным. Но пример ниже все поясняет. const array = [new Bird(), new Bird(), new Bird()]; const filter = (predicate: F) => { return array.filter(predicate); }; const someFunction4 = (s: Crow) => { s.caw(); // но ведь в последней строке мы планируем проитерироваться по Bird(), у которых нет метода caw() }; filter(someFunction4); // Error Возвращаясь к in/out Getter ковариантен относительно T, поэтому out модификатор. Setter контравариантен относительно T, поэтому in модификатор.
Если кого-то заинтересует подробнее почему примеры из in/out совместимы, могу посоветовать прочитать про совместимость типов на основе вариантности (Ковариантность, Контрвариантность)
in out из C# стащили. Там это юзалось для generic интерфейсов, тесно связано с covariance/contravariance/invariance. В ts вывод типов поумнее, по этому как-то оно сходу и не нужно было, но видимо добавили для специфичных случаев когда оно само разрулить не может. Мутная тема конечно, плохо запоминается
Привет! Можешь подсказать по примеру на 13:51, не понятны 2 момента. 1-ый: почему параметры функции predicate: index, originalArray здесь описаны и они обязательные, хотя в isNumber мы принимаем только value и в build-in функции filter эти параметры необязательные . И 2-ой вопрос: в чём конкретное различие FilteredItem и Item, ведь в конечном итоге FilteredItem просто расширяет Item и они оба имеют один тип. PS: спасибо за контент!
hi, можешь помочь с типом??? Я на проекте понаписывал кучу разных типов, но с одним кое-что не получается, но так объяснить не могу, нужно показывать код...
Привет! Спасибо за полезную инфу! Можно чуть медленнее и более "разжевывать" для чайников?) Я бы лучше два получасовых ролика посмотрел, чем один в твоей скорости х1.5))
13:40 автор похоже просто скопировал выведенный тип из нативной filter? 😁 Там достаточно и такого объявления дабы не перегружать синтаксис: function myfilter( arr: Item[], predicate: (value: Item) => value is FilteredItem ) { return arr.filter(predicate) } Тем не менее благодарю - почерпнул из видео полезного для себя! Не знал про такую особенность применения тайпгардов!
Доку пересказывать, к сожалению, не вижу смысла) Покрываю только те темы, которые считаю реально полезными и нужными. Но думаю в плейлисте большую часть тем разберем так или иначе.
Аналога этого видео больше нет на просторах рунета, подробнейшее объяснение, раньше ничего подобного вообще не видел!!!
Спасибо, очень сжатый и полноценный сгусток информации
Супер! Лучшее видео по разбору дженериков, больше половины из ролика вообще нигде на других каналах не видел, Спасибо!
рад, что понравилось!
Интересный момент про запятую в JSX, не знал этого. Спасибо👍
Я даже не думал, что кто-то уделит отдельное внимание этому. Спасибо за фидбэк!
@@ayub_begimkulov я тоже долго мучался с этим, но стак оверфлоу наше всё)
Этот момент не раз отталкивал исползовать дженерики в компонентах Реакт)
реально это была проблема))) спасибо за такой маленький, но очень важный нюанс)
У тебя лучшие видео про ts, удачи твоему каналу 😊
Спасибо!
лучшее видео про объяснение дженериков )
Спасибо!
Канал тотальной годноты, по своей ценности очень похож на ulbi tv, уровень экспертности автора поражает, да, здесь есть чему поучиться middle разрабам!!!
очень круто объяснил про in out
Спасибо!
Спасибо за хороший контент
Спасибо
Пожалуйста!
лучший разбор дженериков на всём ютубе, спасибо тебе, очень много нового узнал)
У тебя отличный контент, спасибо!
Но, кажется, чтобы понять in/out, стоило рассказать про вариантность.
in/out явно указывают вариантность.
Вариантность это один из механизмов с помощью которого компилятор понимает совместимы типы или нет.
Всего 4 вида вариантности.
Нас интересуют сейчас 2 из них.
1) ковариантность - если ожидаем родительский класс, то можно присвоить и класс потомок
2) контравариантность - если ожидаем родительский класс, то нельзя присвоить класс потомок.
Но можно присвоить класс, который предок родительского
Даны классы
class Animal {
public name = '';
}
class Bird extends Animal {
public fly() {}
}
class Crow extends Bird {
public caw() {}
}
const somebody1: Animal = new Animal(); // можно присвоить также new Bird() и new Crow()
const somebody2: Bird = new Bird(); // можно присвоить также new Crow()
const somebody3: Crow = new Crow(); // сюда больше ничего нельзя присвоить кроме Crow
Это примеры ковариантности. В ts везде кроме параметров функций используется ковариантность.
В параметрах функций контравариантность.
Пример контравариантности:
type F = (s: Bird) => boolean
const someFunction1: F = (s: Animal) => true // ok
const someFunction2: F = (s: Bird) => true // ok
const someFunction3: F = (s: Crow) => true // ERROR! Типы не совместимы
На первый взгляд это может показаться странным.
Но пример ниже все поясняет.
const array = [new Bird(), new Bird(), new Bird()];
const filter = (predicate: F) => {
return array.filter(predicate);
};
const someFunction4 = (s: Crow) => {
s.caw(); // но ведь в последней строке мы планируем проитерироваться по Bird(), у которых нет метода caw()
};
filter(someFunction4); // Error
Возвращаясь к in/out
Getter ковариантен относительно T, поэтому out модификатор.
Setter контравариантен относительно T, поэтому in модификатор.
Спасибо за дополнение!
Довольно информативно получилось
Спасибо!
Спасибо за труд с помщю твоих видео я стал лучше понимать typescript хорошо обясняешь еще и примеры очень разясняют
Спасибо!
спасибо большое аюб за твои видосы!
👀👀👀, мощный ролик. 👍👍👍
Спасибо!
Контент огонь! 🔥
Спасибо!
Отличный контент, спасибо тебе! Больше видео по тс)
Спасибо!
Супер❤ Давай про infer тогда ещё!
Спасибо! infer есть в планах.
крутой контент
Спасибо!
Спасибо!
Пожалуйста!
комментарий в поддержку канала
Спасибо!
Топовый канал, уверен, что он будет рости. Автору большой респект
Спасибо!
Если кого-то заинтересует подробнее почему примеры из in/out совместимы, могу посоветовать прочитать про совместимость типов на основе вариантности (Ковариантность, Контрвариантность)
Аюб, спасибо за видео) Что у тебя за наушники?
sony wh-1000xm4
in out из C# стащили. Там это юзалось для generic интерфейсов, тесно связано с covariance/contravariance/invariance. В ts вывод типов поумнее, по этому как-то оно сходу и не нужно было, но видимо добавили для специфичных случаев когда оно само разрулить не может. Мутная тема конечно, плохо запоминается
Кто-то тут еще говорил, что in out из sql взяли. Так вообще согласен, что плохо запоминается по началу.
14:30 кайфово
Ага)
Привет! Можешь подсказать по примеру на 13:51, не понятны 2 момента. 1-ый: почему параметры функции predicate: index, originalArray здесь описаны и они обязательные, хотя в isNumber мы принимаем только value и в build-in функции filter эти параметры необязательные . И 2-ой вопрос: в чём конкретное различие FilteredItem и Item, ведь в конечном итоге FilteredItem просто расширяет Item и они оба имеют один тип. PS: спасибо за контент!
3:30 С версии Typescript 5.0 можно использовать const прямо в дженерике объявления функции
Да, это классная фича. Спасибо, что поделился!
Слушай, как у тебя vscode тип подсвечивает? Это расширение или ты на видео накладываешь?? Спасибо
marketplace.visualstudio.com/items?itemName=Orta.vscode-twoslash-queries
hi, можешь помочь с типом??? Я на проекте понаписывал кучу разных типов, но с одним кое-что не получается, но так объяснить не могу, нужно показывать код...
Чел просто шарит за то что говорит
Спасибо!
Скажите пожалуйста в чем разница между:
(value:T) => и
(value: string) =>
если знаем что тип стринг, зачем дженерик?
Вот наглядный пример:
tsplay.dev/mxjQzw
@@ayub_begimkulov Спасибо!
Спасибо за видео, только вот новый синтаксис вообще запутанно как-то, с этими бейсами, спицификами))
Сама фича вообще сложная, нужно иметь какой-то бекграунд с похожими проблемами, чтобы все это понять. Спасибо за фидбэк!
У тебя своя студия? Когда следующий трек?
Это переговорка)
Привет! Спасибо за полезную инфу! Можно чуть медленнее и более "разжевывать" для чайников?) Я бы лучше два получасовых ролика посмотрел, чем один в твоей скорости х1.5))
Привет. Хорошо, постараюсь, в следующем видео улучшить эти моменты. Спасибо за обратную связь!
типЫ - это на районе которые?
Да
Постараюсь в след видосах больше обратить на это внимание. Спасибо за фидбэк!
отличная информация , но только быстро говоришь не успеваю уловить иногда
Давай уже курс свой создавай)
Думаю запущу как-нибудь, пока только коучингом/консалтингом/менторингом занимаюсь.
А на какую тему хотел бы увидеть курс?
ты откуда ?
можно помедленнее ?)
Спасибо за фидбэк! Постараюсь в следующий раз не торопиться так сильно, а пока можно поставить 0.75 скорость)
@@ayub_begimkulov посади медленно говорящего джуна, пусть переозвучивает, заодно и сам разберется, пока вникает во всё это))
@@_GyG_ Мне кажется так сложнее будет, так как он может упустить моменты) Да и в целом самому надо софт скиллы качать.
Рахмэт
не за что)
Мозги кипят! 😀
Болит - значит растет)
13:40 автор похоже просто скопировал выведенный тип из нативной filter? 😁 Там достаточно и такого объявления дабы не перегружать синтаксис:
function myfilter(
arr: Item[],
predicate: (value: Item) => value is FilteredItem
) {
return arr.filter(predicate)
}
Тем не менее благодарю - почерпнул из видео полезного для себя! Не знал про такую особенность применения тайпгардов!
Посмотрел предыдущее видео, все круто, перешёл на это и чёт не понимаю ничего, Айюб говори чуть помедленнее, очень сложно успевать за твоими мыслями)
Ок, постараюсь исправить в следующем видео. Спасибо за фидбэк!
друг а ты можешь запилить гайды по каждому разделу handbook тс доки?
Доку пересказывать, к сожалению, не вижу смысла) Покрываю только те темы, которые считаю реально полезными и нужными. Но думаю в плейлисте большую часть тем разберем так или иначе.
Ставь бейз если понял про in/out
Ставь specific, если не понял ничего
Вроде в комментах количество specific не показывается)
Сильно тарахтишь, говори членораздельно.
Как я помню in, out есть в PL/SQL. Очень полезное видео, спасибо😃👍🏼
Прикольно, даже не знал об этом.