Продвинутое использование дженериков в TypeScript

Поделиться
HTML-код
  • Опубликовано: 24 дек 2024

Комментарии • 92

  • @romanryaboshtan9270
    @romanryaboshtan9270 Год назад +1

    Аналога этого видео больше нет на просторах рунета, подробнейшее объяснение, раньше ничего подобного вообще не видел!!!

  • @ЛеонидИванов-й3ь
    @ЛеонидИванов-й3ь 6 месяцев назад +1

    Спасибо, очень сжатый и полноценный сгусток информации

  • @АнатолийГорбов-о1ь

    Супер! Лучшее видео по разбору дженериков, больше половины из ролика вообще нигде на других каналах не видел, Спасибо!

  • @АлександрКалинин-ъ6й

    Интересный момент про запятую в JSX, не знал этого. Спасибо👍

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад +1

      Я даже не думал, что кто-то уделит отдельное внимание этому. Спасибо за фидбэк!

    • @_GyG_
      @_GyG_ Год назад +2

      @@ayub_begimkulov я тоже долго мучался с этим, но стак оверфлоу наше всё)

    • @aipronator
      @aipronator Год назад

      Этот момент не раз отталкивал исползовать дженерики в компонентах Реакт)

    • @АнатолийГорбов-о1ь
      @АнатолийГорбов-о1ь Год назад

      реально это была проблема))) спасибо за такой маленький, но очень важный нюанс)

  • @givgiv6688
    @givgiv6688 Год назад +2

    У тебя лучшие видео про ts, удачи твоему каналу 😊

  • @gazdhikhartumov1159
    @gazdhikhartumov1159 Год назад +1

    лучшее видео про объяснение дженериков )

  • @romanryaboshtan9270
    @romanryaboshtan9270 Год назад

    Канал тотальной годноты, по своей ценности очень похож на ulbi tv, уровень экспертности автора поражает, да, здесь есть чему поучиться middle разрабам!!!

  • @andreylobanov4983
    @andreylobanov4983 Год назад +2

    очень круто объяснил про in out

  • @rizemun
    @rizemun Год назад

    Спасибо за хороший контент

  • @dfkadyr
    @dfkadyr Год назад +1

    Спасибо

  • @shadowplay1211
    @shadowplay1211 Год назад

    лучший разбор дженериков на всём ютубе, спасибо тебе, очень много нового узнал)

  • @maria-kuznetsova-s
    @maria-kuznetsova-s 5 месяцев назад +2

    У тебя отличный контент, спасибо!
    Но, кажется, чтобы понять 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 модификатор.

    • @ayub_begimkulov
      @ayub_begimkulov  5 месяцев назад +1

      Спасибо за дополнение!

  • @johnd1431
    @johnd1431 Год назад +1

    Довольно информативно получилось

  • @narek1771
    @narek1771 Год назад +3

    Спасибо за труд с помщю твоих видео я стал лучше понимать typescript хорошо обясняешь еще и примеры очень разясняют

  • @kirillboychenko7724
    @kirillboychenko7724 Год назад +1

    спасибо большое аюб за твои видосы!

  • @fedordostoevskiy4209
    @fedordostoevskiy4209 Год назад +1

    👀👀👀, мощный ролик. 👍👍👍

  • @malsagov6331
    @malsagov6331 Год назад +1

    Контент огонь! 🔥

  • @vladosk-lv6kp
    @vladosk-lv6kp Год назад +1

    Отличный контент, спасибо тебе! Больше видео по тс)

  • @WebEnv
    @WebEnv Год назад +1

    Супер❤ Давай про infer тогда ещё!

  • @anton7p704
    @anton7p704 Год назад +2

    крутой контент

  • @alexanderkomanov4151
    @alexanderkomanov4151 Год назад +1

    Спасибо!

  • @mercury_2379
    @mercury_2379 Год назад +1

    комментарий в поддержку канала

  • @LevShuroff
    @LevShuroff Год назад +3

    Топовый канал, уверен, что он будет рости. Автору большой респект

  • @maria-kuznetsova-s
    @maria-kuznetsova-s 5 месяцев назад +1

    Если кого-то заинтересует подробнее почему примеры из in/out совместимы, могу посоветовать прочитать про совместимость типов на основе вариантности (Ковариантность, Контрвариантность)

  • @kirillpodolinniy309
    @kirillpodolinniy309 Год назад +1

    Аюб, спасибо за видео) Что у тебя за наушники?

  • @jgkdmdevienjjgg8866
    @jgkdmdevienjjgg8866 Год назад +3

    in out из C# стащили. Там это юзалось для generic интерфейсов, тесно связано с covariance/contravariance/invariance. В ts вывод типов поумнее, по этому как-то оно сходу и не нужно было, но видимо добавили для специфичных случаев когда оно само разрулить не может. Мутная тема конечно, плохо запоминается

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      Кто-то тут еще говорил, что in out из sql взяли. Так вообще согласен, что плохо запоминается по началу.

  • @raijinhasarrived
    @raijinhasarrived Год назад +1

    14:30 кайфово

  • @chistyakofff
    @chistyakofff Год назад

    Привет! Можешь подсказать по примеру на 13:51, не понятны 2 момента. 1-ый: почему параметры функции predicate: index, originalArray здесь описаны и они обязательные, хотя в isNumber мы принимаем только value и в build-in функции filter эти параметры необязательные . И 2-ой вопрос: в чём конкретное различие FilteredItem и Item, ведь в конечном итоге FilteredItem просто расширяет Item и они оба имеют один тип. PS: спасибо за контент!

  • @Sengulair
    @Sengulair Год назад +1

    3:30 С версии Typescript 5.0 можно использовать const прямо в дженерике объявления функции

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      Да, это классная фича. Спасибо, что поделился!

  • @rustam_gasymov
    @rustam_gasymov Год назад +1

    Слушай, как у тебя vscode тип подсвечивает? Это расширение или ты на видео накладываешь?? Спасибо

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      marketplace.visualstudio.com/items?itemName=Orta.vscode-twoslash-queries

  • @romanryaboshtan9270
    @romanryaboshtan9270 Год назад

    hi, можешь помочь с типом??? Я на проекте понаписывал кучу разных типов, но с одним кое-что не получается, но так объяснить не могу, нужно показывать код...

  • @amangeldi3424
    @amangeldi3424 Год назад

    Чел просто шарит за то что говорит

  • @artemivanov5013
    @artemivanov5013 Год назад +1

    Скажите пожалуйста в чем разница между:
    (value:T) => и
    (value: string) =>
    если знаем что тип стринг, зачем дженерик?

  • @web__dev
    @web__dev Год назад

    Спасибо за видео, только вот новый синтаксис вообще запутанно как-то, с этими бейсами, спицификами))

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад +1

      Сама фича вообще сложная, нужно иметь какой-то бекграунд с похожими проблемами, чтобы все это понять. Спасибо за фидбэк!

  • @just__did__it
    @just__did__it Год назад +1

    У тебя своя студия? Когда следующий трек?

  • @_GyG_
    @_GyG_ Год назад +3

    Привет! Спасибо за полезную инфу! Можно чуть медленнее и более "разжевывать" для чайников?) Я бы лучше два получасовых ролика посмотрел, чем один в твоей скорости х1.5))

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад +3

      Привет. Хорошо, постараюсь, в следующем видео улучшить эти моменты. Спасибо за обратную связь!

  • @kostya3312
    @kostya3312 Год назад +1

    типЫ - это на районе которые?

    • @mikeempire
      @mikeempire Год назад

      Да

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      Постараюсь в след видосах больше обратить на это внимание. Спасибо за фидбэк!

  • @AibekM-x7v
    @AibekM-x7v Год назад

    отличная информация , но только быстро говоришь не успеваю уловить иногда

  • @borisfred7192
    @borisfred7192 Год назад

    Давай уже курс свой создавай)

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      Думаю запущу как-нибудь, пока только коучингом/консалтингом/менторингом занимаюсь.
      А на какую тему хотел бы увидеть курс?

  • @johnenglish5898
    @johnenglish5898 Год назад

    ты откуда ?

  • @ЭзизК
    @ЭзизК Год назад +6

    можно помедленнее ?)

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад +4

      Спасибо за фидбэк! Постараюсь в следующий раз не торопиться так сильно, а пока можно поставить 0.75 скорость)

    • @_GyG_
      @_GyG_ Год назад +2

      @@ayub_begimkulov посади медленно говорящего джуна, пусть переозвучивает, заодно и сам разберется, пока вникает во всё это))

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад +1

      @@_GyG_ Мне кажется так сложнее будет, так как он может упустить моменты) Да и в целом самому надо софт скиллы качать.

  • @raijinhasarrived
    @raijinhasarrived Год назад +1

    Рахмэт

  • @igor_ni
    @igor_ni Год назад

    Мозги кипят! 😀

  • @Artem-u5e9c
    @Artem-u5e9c Год назад

    13:40 автор похоже просто скопировал выведенный тип из нативной filter? 😁 Там достаточно и такого объявления дабы не перегружать синтаксис:
    function myfilter(
    arr: Item[],
    predicate: (value: Item) => value is FilteredItem
    ) {
    return arr.filter(predicate)
    }
    Тем не менее благодарю - почерпнул из видео полезного для себя! Не знал про такую особенность применения тайпгардов!

  • @mikeempire
    @mikeempire Год назад

    Посмотрел предыдущее видео, все круто, перешёл на это и чёт не понимаю ничего, Айюб говори чуть помедленнее, очень сложно успевать за твоими мыслями)

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад +1

      Ок, постараюсь исправить в следующем видео. Спасибо за фидбэк!

  • @ferdinandkontr1451
    @ferdinandkontr1451 Год назад

    друг а ты можешь запилить гайды по каждому разделу handbook тс доки?

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      Доку пересказывать, к сожалению, не вижу смысла) Покрываю только те темы, которые считаю реально полезными и нужными. Но думаю в плейлисте большую часть тем разберем так или иначе.

  • @DenisB-d5f
    @DenisB-d5f Год назад +1

    Ставь бейз если понял про in/out
    Ставь specific, если не понял ничего

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      Вроде в комментах количество specific не показывается)

  • @drevitsky
    @drevitsky Год назад

    Сильно тарахтишь, говори членораздельно.

  • @人天-i5s
    @人天-i5s Год назад +1

    Как я помню in, out есть в PL/SQL. Очень полезное видео, спасибо😃👍🏼

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      Прикольно, даже не знал об этом.