Infer is easier than you think

Поделиться
HTML-код
  • Опубликовано: 17 июн 2024
  • TypeScript's infer keyword is MUCH narrower, much less widely used than you think it is. It has ONE use case, and we cover it in a ridiculous amount of depth here.
    Become a TypeScript Wizard with Matt's upcoming TypeScript Course:
    www.totaltypescript.com/
    Follow Matt on Twitter
    / mattpocockuk
  • КиноКино

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

  • @nyambe
    @nyambe Год назад +117

    You really are the Typescript wizard.

  • @jeralm
    @jeralm Год назад +76

    I already considered myself an advanced TypeScript dev, but a good understanding of infer was missing from my arsenal. Thank you so much for this.

  • @dueft4479
    @dueft4479 Год назад +20

    The comparison with the replace-regex was awesome. Helped me alot to understand infer better! Thx Matt!

  • @jasonstewart7983
    @jasonstewart7983 Год назад +11

    Very cleanly spoken. The mental model for 'infer' is super valuable. The comparison of 'extends' to a regex match and 'infer' to the capture group of the regex was what I was missing. It's so much easier to get my head around this after watching this video. Three cheers!

  • @ivan_dramaliev
    @ivan_dramaliev Год назад +35

    To me, the most intuitive mental model for types (in TypeScript) is that of (mathematical) sets. 'never' is simply the empty set, 'any' is the set of everything, 'string' is the infinite set of all possible strings, while any particular string (e.g. 'abc') when used as a type is simply the set consisting of a single element that is that particular string, and so on. Generics act somewhat like functions at the level of the type system (with the types listed between < and > acting as the arguments), and the 'extends' and 'infer' operators are there for type pattern matching and extraction.

    • @user-hd7ju4wu4b
      @user-hd7ju4wu4b 10 месяцев назад +2

      Came to say this, you are very right

    • @Rostgnom
      @Rostgnom 9 месяцев назад +3

      What's the mathematical anology to the `unknown` type?

    • @user-hd7ju4wu4b
      @user-hd7ju4wu4b 9 месяцев назад +3

      @@Rostgnom i see it as a set that contains all the other sets

    • @Alastairtheduke1
      @Alastairtheduke1 9 месяцев назад

      What's the 'never' type? Something you haven't put into a set yet?

    • @user-hd7ju4wu4b
      @user-hd7ju4wu4b 9 месяцев назад +1

      @@Alastairtheduke1 just empty set with no elements

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

    I was happy and satisfied with the basic pattern matching mental model of infer, then you completely blew my mind when you went even deeper into infer black magic and completely demystified it. Well done!

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

    I'm a recent "convert" to your channel. There's a lot of (let's face it) simply awful programming tutorial channels on RUclips and it's such a rare treat to find one, like this, that's of really good quality. It's got to the stage now where you're knocking "Arjan Codes" of of my personal number 1 spot. Keep up the excellent work.

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

    Liked the pairing with ‘never’ explanation, and how to think about its usage, felt like an aha moment 🎉

  • @EpicNicks
    @EpicNicks 2 месяца назад

    Came here after seeing the infer keyword in the ReturnType generic type definition wondering what this magic was.
    Thanks for the explanation.

  • @MrMcFyfey
    @MrMcFyfey Год назад +7

    Great explanation, thanks Matt! I've been trying to find some more advanced typescript tutorials for a while now

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

    You just made infer so easy! it was a thing that I have struggle to understand until seeing this video! Matt thanks a lot! You are a true hero and TypeScript mage!

  • @codecleric4972
    @codecleric4972 3 месяца назад

    Incredible. I grok'd the official docs explanation and it helped me understand some parts of a project codebase that I was struggling with before. But after watching this video, it's absolutely crystal clear and gives me much more context for how it can be used more broadly

  • @WilderPoo
    @WilderPoo Год назад +11

    I love that this is 13:37 long

    • @mattpocockuk
      @mattpocockuk  Год назад +8

      Gotta go deep

    • @hansschenker
      @hansschenker 4 месяца назад

      the longer an explanation is the more shallow it gets!@@mattpocockuk

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

    Even though I have an idea of what infer does, I still learnt something new from this (didn't know it's only applicable to conditional types)! Can't wait to dig into Total TypeScript more as you expand the content in that course!

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

    The regex analogue really helps paint the mental model, great video!

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

    This is brilliantly explained. Thank you Matt! I got my employer to buy Total TypeScript for me, can't wait to dig in!

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

    Been working on some typesafe express middleware lately, and infer really did a number on me. This cleared things up heaps, thanks for this!

  • @user-mf1ft6iz4l
    @user-mf1ft6iz4l Год назад +1

    He explained everything in a very simple and easy to understand way. thank you

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

    This is definitely the missing explanation for "infer" that I was needing. Great job, can't wait to see more content.

  • @wiskasIO
    @wiskasIO 11 месяцев назад

    I gotta say that your videos are very intimidating for me because I'm still at an intermediate level in JS Bootcamp but your calm style and clear explanations make me kinda understand much of what you expose in your videos once I watch them a couple of times. I can't wait to reach a level where I'm ready to buy your TS course. Thank you, great work!

  • @ljuglampa
    @ljuglampa Год назад +41

    You might be a TypeScript wizard, not sure, but I do know you're a educational wizard! Thank you for doing these ❤️

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

    Thank you very much! I am a Ruby developer who is interested in TS and your videos really help me dive deep into TS.

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

    Thank you Matt, your explanation really help me understand Typescript better. Now I'm also enjoy doing Type Chalenge because of it.

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

    i liked because you are awesome, your explanations, the energy, the pedagogie, a true wizard legend

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

    Ahh ok. I don't think I fully grasped the potential of `infer` until you brought in the bit about being able to confer constraints on it with the extends keyword. Really cool stuff

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

    Genuinely thought I was subscribed until the shout out at the end, now I am! Great vid

  • @birrafondaio
    @birrafondaio 11 месяцев назад

    Underrated Master of Typescript 👌

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

    Love your style of teaching.

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

    Love your videos! Sharing with my team

  • @elielberra2867
    @elielberra2867 3 месяца назад

    Amazing video! Thank you so much for this super clear and helpful explanation :)

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

    This is exactly what I was looking for, thank you

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

    I have to apply this knowledge somehow into my head now. That was great!

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

    The object examples made it clear to me :D Thanks

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

    You are so good at teaching 😍 thanks for sharing your knowledge

  • @ivaylopetrov9956
    @ivaylopetrov9956 6 месяцев назад

    Thank you very much for the channel Matt aka TS Wizard 🙏. Just want to mention that something about the starting explanation what is conditional type and basically constrain in TS. So I understand it as the construction 'A extends B' basically means A subset of B. From SetTheory in Maths. I saw that many people are replaying this part, including me.
    Happy coding 💪

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

    Loved the video. You're a gem

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

    great content man keep it up 💪🏼

  • @user-cp7fl1jl5e
    @user-cp7fl1jl5e Год назад

    Awesome explanation! Easy to digest

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

    I totally love it! finally, I understand these crazy extends I was thinking of it as a extending some parent class or something It was driving me crazy

  • @Timjstewart
    @Timjstewart 8 месяцев назад

    Very insightful! Thank you.

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

    Best explanation ever. Thank you

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

    Really, really awesome explanation!

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

    Now this. This is extremely useful.

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

    A brilliant explanation!

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

    Great content, Matt 😜

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

    Thanks Matt!!

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

    Thanks. Perfect :) Infer was the missing piece of the puzzle for me. I sorta understood what it was doing, but the syntax was just a bit nuts with the all the "extends matching".

  • @dawid_dahl
    @dawid_dahl 5 месяцев назад

    Great explanation, thanks!

  • @HHJoshHH
    @HHJoshHH 5 месяцев назад

    Found you from Theo. You’re awesome Matt! ❤ 💻

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

    explained brilliantly

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

    Dude You are one of the best web-dev related channels on YT, and You only have a bit more than 20k followers... Hope Your channel will grow because You definitely deserve it! Buying Your paid course! :D

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

      Thanks pal! Gained 11k subs in 3 weeks so hoping that changes soon!

  • @betoreyes3564
    @betoreyes3564 6 месяцев назад

    Great video ❤, regards from México

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

    great explanation

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

    You have my respect kind sir.

  • @bartek...
    @bartek... Год назад

    Video length is epic!!!

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

    Thank you, you are amazing!

  • @NoOne-ev3jn
    @NoOne-ev3jn Год назад

    I just found a gem kind of channels

  • @AhsanKhan-eb2zb
    @AhsanKhan-eb2zb Год назад

    great explanation

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

    I liked it. Literally and metaphorically

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

    I am your fan typescript wizard ❤️

  • @henrym5034
    @henrym5034 6 месяцев назад

    This is gem

  • @aldojordanchoque7512
    @aldojordanchoque7512 4 месяца назад

    Best explanation

  • @colorofadog
    @colorofadog 5 месяцев назад

    wow amazing! thanks!

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

    Unfortunately, despite its popularity, Typescript has very poor documentation. Very often I don't understand what Typescript can or can't do.
    Thanks Matt for explaining those tricky parts.

  • @CompanionCube
    @CompanionCube 4 месяца назад

    manager: when a user clicks this button, please increase the counter in the db
    web devs af:

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

    Lovely thanks

  • @btiwari-games5279
    @btiwari-games5279 Год назад

    I'll like to tell my friends about you as that typescript guy

  • @-anonim-3008
    @-anonim-3008 17 дней назад

    Thanks a lot! That's easy)

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

    Really helpful! Thank you!
    The only complaint is the jumping between examples (going down then up the file), makes it harder to follow

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

    Great pedagogy

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

    love how he said boolean with french style :)) funny teacher

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

    Just another quite not so easy thing made simple. infer is really useful and super fun!

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

    My man

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

    my mind exploded somehere near 5 minute, but i survived until the end and remember one crucial thing: about the only use case of infer. Did i hate the video? I made it until the end so i give a thumb up.

  • @mauriciopereyra3339
    @mauriciopereyra3339 10 месяцев назад

    Que bien explicado

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

    Good God, I've been declaring so many different generic arguments with default values when I should have been using infer

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

    Could you make a video explain peer dependencies like a TypeScript Wizard?

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

    Request: Please plan your examples ahead of time. After making each change, take some time to explain it. No need to rush. Thanks for your videos. They are super helpful.

  • @ya4dang1
    @ya4dang1 9 месяцев назад

    Hello TS Wizard!

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

    Great video Matt! Is it also possible to infer the type of function parameters? What's the correct way?

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

      Yes!
      export type Parameters = T extends (...args: infer TParameters) => any ? TParameters : never;

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

    well.. subscribed :D

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

    it took me a most of this video to realise the ternary statement was for the extends, not the infer. Ah hah.

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

    Combine composition with infer keyword and you will get unimaginable solutions.

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

    i should like it and i do like it🖤

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

    what I learned was, do
    type AntiArray = T extends (infer U)[] ? U : never;
    not
    type AntiArray = T extends unknown[] ? T[0] : never;

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

    The fact that the length of this video is 13:37 🤯

  • @kilo.ironblossom
    @kilo.ironblossom 10 месяцев назад

    What are you??!! A wiza.... Ah okay!! Right!!

  • @vkiperman
    @vkiperman 8 месяцев назад

    This went by a little fast. But very interesting!!!

  • @mateussarmento7692
    @mateussarmento7692 Месяц назад

    I believe never should be nothing and unknown should be something in typescript.

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

    Why not use regex backreferences ($1) here as an analogy?

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

    I've seen infer used in a really cool type that replaces parts of strings in a template literal within a type. I still can't really understand how it works there even after watching this.

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

      The type looks like this:
      export type Replace = T extends `${infer L}${S}${infer R}` ?
      Replace : `${A}${T}`

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

    Video duration is leet!

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

    Any tips on how to use infer to get the type of an array item?
    I have types being generated from swagger
    This comes from the generator:
    type Thing = {
    org_key: string;
    role: "viewer" | "editor" | "admin";
    }[] | undefined
    Trying to do type Blah = Thing[0] doesn't work because ofthe | undefined.
    Any help would be greatly appreciated!

  • @adtc
    @adtc 8 месяцев назад

    What happens when you have a union of infers and the object being inferred from matches more than one pattern? Does it follow the first pattern, last one or a union of all?

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

    Hi Matt, when will the course be available for purchase? What bonuses do I lose if I use the regional price?

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

      Hey pal, we'll put it back on sale in January once we've got the second module ready. We are planning some bonus content, but we haven't released info about it yet. If you buy it via PPP we can always upgrade you if needed.

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

      @@mattpocockuk sounds good, thanks for the answer

  • @Atmos41
    @Atmos41 2 месяца назад

    Infer is like extracting a type as a variable. As soon as I understand that, Infer was easy.

  • @elmalleable
    @elmalleable 7 месяцев назад

    I might be wrong but is infer basically acting like a tag that says tells ts to pay attention to something. Which we can reuse for more things?

  • @BlackxesWasTaken
    @BlackxesWasTaken 8 месяцев назад

    Can you tell me the font-family you used here ?

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

    I didn't understand anything. 😅😅 what are the prerequisites to understand this?

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

    🤯🤯🤯