Build Generalized DRY Angular Code with Generics

Sdílet
Vložit
  • čas přidán 27. 07. 2024
  • With DRY, or "Don't Repeat Yourself" the goal is to reduce or eliminate duplicate code, making our intent more clear.
    In this video, we'll examine techniques for using generics to build generalized functions in our Angular applications.
    Links
    Code: stackblitz.com/~/edit/stackbl...
    CZcams video: "Understanding Immutability in JavaScript": • Understanding Immutabi...
    Special Thanks
    🌟 To Sander Elias for suggesting generics. Follow him at: mastodon.social/@sanderelias
    Content
    00:00 DRY - Don't repeat yourself
    00:40 Sample application
    01:36 Generics
    03:51 Calling a generic function
    04:42 keyof
    08:00 Generalized signal update
    10:46 Generic constraints
    14:23 Wrap up
    ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
    😊About Me
    Hey! I'm Deborah Kurata
    I'm a software developer and CZcams content creator. I speak at conferences such as VSLive and ng-conf. I write articles for freeCodeCamp. And I'm a Pluralsight author with courses in the top 10 most popular (out of 7,000+) for over 5 years. For my work in support of software developers, I've been recognized with the Microsoft Most Valuable Professional (MVP) award, and I'm a Google Developer Expert (GDE).
    View my CZcams content: / @deborah_kurata
    Contact me on Twitter: / deborahkurata
    Find my Pluralsight courses: www.pluralsight.com/profile/a...
    Access my freeCodeCamp articles: www.freecodecamp.org/news/aut...
    ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
    #angular
    #angularsignals
    #angulartutorials
    #angulartutorial
    #angulardevelopers
    #angularTypeScript
    #angularapplications
    #generics
    #genericswithangular
    #DRYwithangular
    #DRYwithgenerics
    #bestangularpractices
  • Věda a technologie

Komentáře • 117

  • @dinysanchez
    @dinysanchez Před měsícem +32

    Please continue creating this amazing content! It's hard to find advanced Angular content elsewhere. As always, Thank you!

  • @HoNow222
    @HoNow222 Před měsícem +6

    PLEASE more videos about Generics and Signals! 😍

  • @jackiecooper9439
    @jackiecooper9439 Před měsícem +1

    Deborah , you are the best!
    No comparison.
    Waiting for your Angular 18 Getting Started course🤗

  • @RsPippen
    @RsPippen Před měsícem +1

    Amazing as always! I would love to see a video on unit testing best practices in Angular when using a declarative approach. I always get stuck and usually have to revert my code back to an imperative style

    • @deborah_kurata
      @deborah_kurata  Před měsícem +1

      Thank you!
      Yes! I had been putting off doing any testing content because the testing libraries Angular supports has changed (Karma, Jasmine, Jest, ngMocks, cypress, Playwright. But maybe it's time to get back to that!
      In the mean time, this could be helpful: angular.dev/guide/testing/services

  • @gasparsantillan5357
    @gasparsantillan5357 Před 29 dny +3

    Signals + Typescript tricks? We needed this!!

  • @roman6504
    @roman6504 Před měsícem +3

    I consider myself very lucky that I accidentally saw it in the recommendations for your channel, Deborah. Thank you very much

  • @joeyvico
    @joeyvico Před 28 dny

    Love these advanced / expert tutorials on both Angular and Typescript. Thanks Deborah

  • @julienr8114
    @julienr8114 Před 21 dnem

    Best CZcams Content for Angular. Thks a lot Deborah.

  • @MrPankoPanko
    @MrPankoPanko Před 24 dny +1

    I am impressed. Really good quality video! Looking for more angular tutorials!

    • @deborah_kurata
      @deborah_kurata  Před 24 dny +1

      Thank you so much! 😊
      You can find my Angular playlists here: czcams.com/play/PLErOmyzRKOCrzJ9zUEGgC1zVzVGt3hMmV.html
      And here: czcams.com/play/PLErOmyzRKOCr07Kcnx75Aqh6PWSbIokPB.html

  • @kettenbach
    @kettenbach Před měsícem +4

    Always love your content Deborah. Been a fan for many many years. You're my goto source for the latest Angular features. Things are clear and concise and easy to digest. Thank you! 🙏

    • @richarddefortune1329
      @richarddefortune1329 Před měsícem +3

      I learned angular by watching Deborah's courses on Pluralsight. She's the best.

    • @kettenbach
      @kettenbach Před měsícem

      @@richarddefortune1329 same. Learned Rxjs too

    • @deborah_kurata
      @deborah_kurata  Před měsícem +1

      Wow, thank you! 😊

  • @osamaabozahra
    @osamaabozahra Před 28 dny

    Thank you for the fantastic video, Deborah.
    I was opening the video saying to myself what is going to be new in generics, I already know them 😅
    Then I learnt "K extends keyof T" and it was mind blowing moment.

    • @deborah_kurata
      @deborah_kurata  Před 28 dny

      Yay! It's so great to hear that the video was useful! Thanks!

  • @lacerdae
    @lacerdae Před 29 dny

    Ma'am, you are the best! So much I have learned with your Angular content. Keep it up

  • @selektahx
    @selektahx Před 26 dny

    Your content is amazing. Please continue to share your knowledge. You are great!

  • @janis666
    @janis666 Před měsícem

    very informative! always enjoying to watch your tutorials. thanks!

  • @MarcoPinheiro
    @MarcoPinheiro Před měsícem

    This is pure gold Deborah, thanks for this awesome resource!!

  • @rolygonz1964
    @rolygonz1964 Před 29 dny

    You are the best . Please continue creating this amazing content. Thank you !

  • @DraaElMizan
    @DraaElMizan Před měsícem

    Amazing, thanks Deborah.

  • @ranjan4elex
    @ranjan4elex Před měsícem

    Awesome content as always.. love the way you explain complex concepts in very easy to understand way, Thank you!!!

  • @stevewitman
    @stevewitman Před měsícem

    AWESOME video Deborah! My knowledge and ability to use generics is only that I know they exist.
    I have this video on my list to revisit this weekend, to type out and explain out loud several times until I can reproduce this all on my own. Thanks!

    • @deborah_kurata
      @deborah_kurata  Před měsícem

      Thank you! Let me know if you have any questions. Have fun!
      (I have the link to my stackblitz in the video notes if you want the code I used.)

  • @mohitpandey2388
    @mohitpandey2388 Před 15 dny

    What an amazing & knowledgeable video. Keep up the good work❤️

  • @nope7843
    @nope7843 Před měsícem

    Awesome as always thanks for sharing it with us 🙏

  • @enverusta7811
    @enverusta7811 Před měsícem

    Awesome content! I was just tackling these kind of things on my projects. Awesome coinsidence.

    • @deborah_kurata
      @deborah_kurata  Před měsícem

      Perfect! Great to hear the info will be useful! Thanks!

  • @KiffinGish
    @KiffinGish Před měsícem

    Nicely done again!

  • @cathyf5449
    @cathyf5449 Před měsícem

    Awesome video as always. Thanks!😄

  • @EmilioDegiovanni
    @EmilioDegiovanni Před měsícem

    Excellent video Deborah!

  • @pazzuto
    @pazzuto Před 11 dny

    Great content! Generics seem easy at first, but can get pretty crazy quick. I remember when they were first introduced in C# back in early 2000 (I think) - It was an interesting concept to grasp, but I can't imagine coding without it now. When it comes to TypeScrpt, it kinda feels the same as back ~2000, the syntax can really give you a headache, but it's definitely worth using it.
    Thank you for a great explanation!

    • @deborah_kurata
      @deborah_kurata  Před 11 dny

      Thank you! And yep!
      This topic is definitely more straightforward for those coming to Angular with a .NET background! For many that come to Angular from HTML or vanilla JavaScript, generics are completely new. I'm sure it must be a big mental shift to "think generically". 😊

  • @denberghvanmartijn
    @denberghvanmartijn Před 24 dny

    This is awesome! would also love a video about best practices in terms of project and folder structure.

  • @en818
    @en818 Před 28 dny

    You explained things so well 🙌

  • @dougl765
    @dougl765 Před 28 dny

    You're the best! Thank-you so much for you skills!

  • @positivenegativ
    @positivenegativ Před měsícem

    I simply cannot thank you enough

    • @deborah_kurata
      @deborah_kurata  Před měsícem

      So happy to hear that it was useful! Thank you!

  • @codewithmenow1412
    @codewithmenow1412 Před 27 dny

    WOW Amazing as usual 🤩

  • @richarddefortune1329
    @richarddefortune1329 Před měsícem

    Thanks so much for this video. You present typescript better than their own website.

  • @BJAnderson
    @BJAnderson Před měsícem

    Amazing explanation. I understand generics, but wanted to see your take on them. Went from too easy to brain melting in 15 minutes, and all while keeping it clear and understandable. Great job :)

    • @deborah_kurata
      @deborah_kurata  Před měsícem

      Now I have that image from "Raiders of the Lost Ark" in my head. LOL!
      Thank you so much for the kind words! 😊

  • @Nabulio85
    @Nabulio85 Před měsícem

    ❤ for you
    ❤️ for your content
    😊
    Thank you again.

  • @_perfectCTO
    @_perfectCTO Před měsícem

    The community owes you big time, Deborah. I hope you never lack the energy to keep going for a long, long time. Just curious, how do you dive into and explore these sometimes new other times advanced concepts? How much trial and error does it involve, or do you have specific places to look beyond documentation?

    • @deborah_kurata
      @deborah_kurata  Před měsícem +1

      That's very kind of you to say.
      I came from Visual Basic -> C# -> JavaScript -> TypeScript, so many of these concepts (like Generics) I already knew from my VB.NET/C# days. I do spent quite a bit of time experimenting, to see how to actually *use* the techniques in an Angular app. Having a specific purpose makes it easier to explain and apply that technique. Then a good amount of googling to ensure I haven't missed or misunderstood something. 😊

  • @ChessPuzzlesVideo
    @ChessPuzzlesVideo Před měsícem +1

    Another great content in a simple language 👍. Can you also make video on SOLID design principle (in angular)

    • @deborah_kurata
      @deborah_kurata  Před měsícem

      Thank you! And great idea! I'll add it to the list. 😊

  • @PanDaNWS
    @PanDaNWS Před měsícem

    Love your video, it helps me improve my coding better.

  • @araujomartin
    @araujomartin Před 29 dny

    Very usefull! Excellent video

  • @joepersonbelgica3980
    @joepersonbelgica3980 Před 23 dny

    Very helpful. Thanks

  • @syedmohammadnejat
    @syedmohammadnejat Před měsícem

    As Always Perfect Video :P

  • @rkumar.lnct24
    @rkumar.lnct24 Před měsícem

    Awesome explanation 🎉

  • @zaferdemir4680
    @zaferdemir4680 Před měsícem

    Super. Thanks

  • @andsons159
    @andsons159 Před měsícem

    My all time teacher,

  • @epoppy
    @epoppy Před měsícem

    this is awesome 🎉

  • @valikonen
    @valikonen Před měsícem +1

    Fantastic example! Let me give you an example: I have a http req. and the response from the backend it's very different from what I must use in front and I created two interfaces, one from the response from the backend and one for UI after I map the values. Can I use a generic in that case? One option it's to use a map operator in pipe...Thank you for your great content!

    • @deborah_kurata
      @deborah_kurata  Před měsícem +1

      Thank you!
      This is how I've done it (as you said, with 'map'), where ProductFromAPI is one interface and Product is the other:
      productsFromAPI$ = this.http.get('api/productsFromAPI')
      .pipe(
      map(products => products.map(product => ({
      id: product.p_id,
      productName: product.p_nam,
      productCode: product.p_cd,
      description: product.p_des,
      categoryId: product.p_c_fk_id,
      price: product.p_p * 1.5
      }) as Product)),
      catchError(this.handleError)
      );
      My first thought is that you wouldn't be able to do something like this with generics because each object would require specific mapping. Unless the mappings for your different object types are very generalized, generics won't be able to help much.

  • @hamadykais9318
    @hamadykais9318 Před 25 dny

    Powerful!!

  • @DejanFilipov-gv8qz
    @DejanFilipov-gv8qz Před 8 dny

    Teacher 💜

  • @rippan87
    @rippan87 Před měsícem

    Great video as always! Very elegant, I wonder if it’s possible to make the generic update function to set multiple props?

    • @deborah_kurata
      @deborah_kurata  Před měsícem

      Thank you!
      TypeScript has variadic tuple types that support a generic spread operator. More information here: www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html#variadic-tuple-types. You could possibly use something like that to take in any number of properties/values. (I haven't had the need for something like this, so don't have an example for you. Maybe a future video? 😄)
      Or maybe more straightforward, use a key/value pair to pass in property/values as an array?

  • @mibi2007
    @mibi2007 Před 28 dny

    thanks 😊

  • @houseofgames6099
    @houseofgames6099 Před měsícem

    Hello I have completed your couple of courses on plurasight.. really loved it.. I mean I was lucky to find you as an instructor for Angular courses.. Could you please do a course on Javascript please. not basic Js language but more of a little above begineer to super Advanced concepts and beauty of js language. So if anyone ask me any advanced/tricky concepts of js I should be able to solve it. More like book series "You don't know Js".. Please!!!

    • @deborah_kurata
      @deborah_kurata  Před měsícem

      Thank you so much! 😊
      I did a JavaScript course here on CZcams. Here's the playlist: czcams.com/play/PLErOmyzRKOCpmitTOazq3_p74Y-yTQB6A.html
      I also have a general "JavaScript Topics" playlist you can find here: czcams.com/play/PLErOmyzRKOCqpYd2OvTxg74DUj9McAjbL.html
      This playlist includes a video on immutability and several lesser known array methods.
      You could check out those videos and see if I cover anything more "advanced beginner" that would be useful for you.
      Are there any other specific JS topics you'd be interested in?

  • @vd2828
    @vd2828 Před měsícem

    Amazing video, Thank you so much. Could you please consider about a video demonstrating how to generically pass input values from a parent component to child component?

    • @deborah_kurata
      @deborah_kurata  Před měsícem

      Thanks!
      Could you elaborate on your suggestion? What's the scenario?
      The new input doesn't require a type, so it's already somewhat generalized: employee = input(); The parent component can pass anything.
      The child can *require* a type using something like this: employee = input();
      And you can do something like this:
      export class FilterComponent {
      someArray = input.required();
      }
      Is that what you are picturing?

    • @vd2828
      @vd2828 Před 29 dny +1

      Hi @@deborah_kurata, Thank you for your reply.
      export class FilterComponent {
      someArray = input.required();
      }
      The class component with the type was what I looking for. We don't need to declare the type of any for the input variable, then we can call the generic function. This is great.

  • @Ali-cx7sy
    @Ali-cx7sy Před 9 dny

    Please about SOLID in Angular

  • @Ali-cx7sy
    @Ali-cx7sy Před 9 dny

    Bilbo, Frodo, Drogo!

  • @matheusluz2318
    @matheusluz2318 Před měsícem

    hi there! love your videos! if you can, please make a sequel about subscribe vs toSignal and async pipe (as mentioned in the video: Use takeUntilDestroyed to Unsubscribe from Angular's Observables 10:17)

    • @deborah_kurata
      @deborah_kurata  Před měsícem

      Thank you so much! Great suggestion! I'll add it to my list.

  • @AlexLikeGolf
    @AlexLikeGolf Před měsícem

    You just taught Typescript Generic in 15 minutes. Can you create a deep-dive Angular Getting Started with your narration style? I enjoyed your Pluralsight videos, but I no longer have access to them.

    • @deborah_kurata
      @deborah_kurata  Před měsícem

      Thank you for watching!
      I have been considering doing some type of "Getting Started" content here. But I haven't quite figured out what that would look like in a CZcams environment. Maybe a set of build-along videos? Thanks for the suggestion.

    • @michaelharrington5860
      @michaelharrington5860 Před 27 dny +1

      Build along videos would be fantastic! ​@@deborah_kurata

  • @miloszivkovic6607
    @miloszivkovic6607 Před měsícem

    I love you.

    • @deborah_kurata
      @deborah_kurata  Před měsícem

      I assume you mean you love my content. 😊 Thank you!

    • @miloszivkovic6607
      @miloszivkovic6607 Před měsícem

      @@deborah_kurata Content is amazing. And the content creator as you is a good human being who is spreading his knowledge to society... If 10M+ people can express love to music, movie stars and other entertainment content, why shouldn't I do the same for someone like yourself? Nothing personal, but this is entertainment for me, so i wanted to express it, exactly like I did, because you are a Rock Star!
      ( with a pretty nice and calming voice :D ).
      Joke aside. As a human to another human, thank you! Keep up with good and honorable work, we need you!

    • @deborah_kurata
      @deborah_kurata  Před měsícem

      That is so very kind of you to say! Thank you! 😊💖

  • @bibbychung
    @bibbychung Před měsícem

    It's so hard ^^|||..