This TypeScript Trick Blew my Mind

  Рет қаралды 38,409

Josh tried coding

Josh tried coding

Күн бұрын

Пікірлер
@albert21994
@albert21994 11 ай бұрын
introducing this to my typescript brain is like adding letters to math in 5th grade
@әкрәм
@әкрәм Жыл бұрын
today i learned about template literal types: type lang = 'en' | 'de' type country = 'us' | 'gb' | 'de' type fullCode = `${lang}-${country}` and this feature you showed looks like an _upgraded_ version of the template literal types, which is going to solve several issues while writing type-safe code. thank you so much! ^^
@joshtriedcoding
@joshtriedcoding Жыл бұрын
that's really cool, thanks for sharing!
@әкрәм
@әкрәм Жыл бұрын
@@joshtriedcoding you are welcome!
@scottz6830
@scottz6830 Жыл бұрын
To add some more flexibility, you could infer like this `${string}-${infer R}-${string}`. that way any dashed dashed styled string would extract the color
@eqprog
@eqprog Жыл бұрын
Thanks. This is arguably less typesafe though. Depends on the context in which the color is being used.
@florianbopp187
@florianbopp187 Жыл бұрын
even more flexibility could be having a delimiter as a second param like this: type ExtractColor = T extends `${infer W1}${D}${infer Rest}` ? W1 | ExtractColor : T
@RicoGrof
@RicoGrof 11 ай бұрын
this is why Typescript is programming language, not just type checker. some guy even create Add type template
@robwatson826
@robwatson826 11 ай бұрын
The more you know. Typescript has some amazing features. Thanks for sharing!
@codewithguillaume
@codewithguillaume Жыл бұрын
Josh: you are my favorite channel for coding.
@livedreamsg
@livedreamsg 10 ай бұрын
This is really cool! But I've never run into a situation where I needed it. I'd use an enum for this.
@asdfasdfuhf
@asdfasdfuhf Жыл бұрын
Okay, this actually blew my mind, I didn't know you could do this with typescript.
@joe-skeen
@joe-skeen Жыл бұрын
Having used TypeScript from day 1 of its release and considering myself an "advanced" user, I still found myself with multiple mind-blown moments watching this
@pqnet84
@pqnet84 11 ай бұрын
day 1 typescript didn't have a lot of those tricks
@froxx93
@froxx93 Жыл бұрын
I had no idea about this. Amazing. Thanks!
@GeneralDeD9963
@GeneralDeD9963 Жыл бұрын
Thank you Josh
@Luxcium
@Luxcium 11 ай бұрын
This is the most underrated KZbinr in the coding space… I think he is so much underrated and talented I will still say that he is underrated after he has is Gold Button because he has the best energy and enthusiasm but he has the ability to make it not just fun and easy to understand but he makes it interesting for any level… you can be intermediate and not have the impression he is going slow for the n00b and yet you can be a beginner and not be lost… I think this guy has some great skills and he knows it and he makes everyone benefit from his knowledge and he has such a positive attitude 🎉🎉🎉🎉 I would love to have my membership card of his fan club 😅😅😅😅
@liberalwrecker949
@liberalwrecker949 Жыл бұрын
Why not use an object as a map and get more flexibility? Const colors = { red: { 500: “text-red-500”, 400: “text-red-400” } } as const Type Color = colors[string] Type Darkness = colors[string][number] Function findColor(color: Color, darkness: Darkness) { return colors[color][darkness] }
@sagecoder8802
@sagecoder8802 11 ай бұрын
Nice idea but not working. const colors = { red: { 500: 'text-red-500', }, blue: { 300: 'text-blue-300', }, } as const; type Color = keyof typeof colors; type Darkness = keyof (typeof colors)[C]; function findColor(color: P, darkness: T) { return colors[color][darkness]; } findColor('blue', 300); This will even predict/autocomplete the darkness parameter based off the color parameter.
@josemfcheo
@josemfcheo 11 ай бұрын
A subscriber earned here
@ARKGAMING
@ARKGAMING Жыл бұрын
This is a really cool feature
@CrankyBarbar1an
@CrankyBarbar1an 11 ай бұрын
OH. MY. GOD. IT HONESTLY BLEW MY MIND TOO.
@francoandre307
@francoandre307 Жыл бұрын
i need learn more typescript, this video blow my mind
@salihyil2
@salihyil2 11 ай бұрын
Where did you see this code?
@AntNZ
@AntNZ Жыл бұрын
Omg this just save me. I having been going in circles trying to figure out how to extract and validate string values in nextjs search params
@InMemoryOfNeo
@InMemoryOfNeo Жыл бұрын
when i watch your videos my brain is blowing
@karangill2065
@karangill2065 Жыл бұрын
At 1:14 we could've just turned the function into generic type and used keyof typeof from data passed.
@super_kenil
@super_kenil Жыл бұрын
Woahh, that's actually a neat thing 🎉. Loved it
@joshtriedcoding
@joshtriedcoding Жыл бұрын
cheers!
@paulbruno4953
@paulbruno4953 Жыл бұрын
Eloquent solution, good job!
@IroshaHewage
@IroshaHewage Жыл бұрын
hey josh. could you make a video sharing your thoughts on stylex. anyway i love your videos ❤
@joshtriedcoding
@joshtriedcoding Жыл бұрын
good idea!!
@ertyuiopos3942
@ertyuiopos3942 9 ай бұрын
thats prerrty cool!
@ReuelTeodoro
@ReuelTeodoro Жыл бұрын
I’m confused why you added ‘number’ to type of colors
@super_kenil
@super_kenil Жыл бұрын
It was an index of an array, from my guess. Line if you want a specific value from an array dynamically, you would have to write const foundItem = myArray[index]
@arisarsenkashari5308
@arisarsenkashari5308 Жыл бұрын
it refers to item positions in the array
@hossamkamal2459
@hossamkamal2459 Жыл бұрын
you can understand it like this , (number type is the set of all possible numbers) so what he did is accessing the array with all possible indices
@mubin-ansari
@mubin-ansari Жыл бұрын
Thanks, this is going to help a lot in Advent of Typescript challenges!
@sefatanam
@sefatanam Жыл бұрын
awesome 😮😮😮
@SonAyoD
@SonAyoD Жыл бұрын
Great tip
@OllyWood688
@OllyWood688 Жыл бұрын
Hahaha so this can cause dev/compile time errors when matching on a dynamic source and that source changes? Awesome, I'm absolutely going to annoy my colleagues with that :D
@ShadoFXPerino
@ShadoFXPerino 11 ай бұрын
The point of TS is to cause as many compile time errors as possible so that less problems happen in the real world.
@shtosik
@shtosik Жыл бұрын
someone has been doing typescript advent
@qorzzz9252
@qorzzz9252 Жыл бұрын
The functionality you are showing (generics and infer keyword) is great, but the example you are using to do so is so bad lol.
@suyashgulati
@suyashgulati Жыл бұрын
Can you suggest a good example? Particularly for infer keyword
@lumitou
@lumitou Жыл бұрын
​@@suyashgulati Infer can be used in many cases in typescript. You can infer the arguments, return type, values in array/objects and much more.
@Irakli008
@Irakli008 Жыл бұрын
It’s common knowledge that JOSH’S OPINION is WRONG and his EXAMPLES are BAD /s
@darkmift
@darkmift Жыл бұрын
He's out here sharing knowledge which benefits many, You put a comment with no value. Offer an alternative instead. Contribute something of actual value.
@Phanboy
@Phanboy Жыл бұрын
As someone with no baseline, this example was great 👍
@neoish
@neoish 11 ай бұрын
Thanks quite useful but also This should be a short.
@reed6514
@reed6514 Жыл бұрын
How's the runtime performance as the list of colors grows? How's it compare to regex?
@scottz6830
@scottz6830 Жыл бұрын
This is typescript, there is no runtime
@holakonoob
@holakonoob Жыл бұрын
what about if its -700 or -400 ...
@Zhundah
@Zhundah Жыл бұрын
You could use `text-${infer R}-${number}` or even `${string}-${infer R}-${number}`, `${'text' | 'bg'}-${infer R}-${number}`. The possibilities are endless.
@big-jo89
@big-jo89 Жыл бұрын
in his example, it should return the given string as is
@yaswanthg5
@yaswanthg5 Жыл бұрын
Advent of typescript
@suyashgulati
@suyashgulati Жыл бұрын
What is advent of typescript?
@codernerd7076
@codernerd7076 Жыл бұрын
// Wishing you a festive season full of joy! Massive thanks for a year packed with stellar coding content! 🎉
@joshtriedcoding
@joshtriedcoding Жыл бұрын
Thanks so much, happy holiday season to you too!!
@TekExplorer
@TekExplorer Жыл бұрын
this is the weirdest type system ive ever seen
@helleye311
@helleye311 Жыл бұрын
I really wish this was as easy in actual code not in typescript. For this you'd basically need to text.split("-")[1], but for more complicated things the only way is writing regex with custom named capture groups, and then destructuring that. But then typescript complains that the match could be null or some groups could not get matched, and for numbers you need to parse them manually later, it's a huge mess. basically, give me reverse string literals where you just go text.extract(`text-${const color}-500`); and you get color out (or undefined/null/empty string if it didn't match). Trademark pending.
@sp3ctum
@sp3ctum Жыл бұрын
I agree, currently I don't know of a great option for this. Each one has downsides: - string.split() is hacky but works for simple cases - regex is cursed and can be hard to debug - a parser combinator library is a nice option but not every project wants to add a dependency just for this
@reed6514
@reed6514 Жыл бұрын
As an alternative to the extract template strings, you could write a function like fn(string input_text, ...must_match) Where args may be either strings or arrays of strings. If string args match input_text at the same character index, then continue. And if one of the strings in the array args matches the input_text starting at the same character index, also continue. But I'd rather use regex.
@CodeZakk
@CodeZakk Жыл бұрын
hi thanks for this video. i have one question why don't we use redux with nextjs. i have never seen a tutorial which uses nextjs with redux can you explain to me this thanks!!!
@O_Eduardo
@O_Eduardo Жыл бұрын
Nice to know about the wizardry.... but for everyone seeing this, never, ever put that on professional code base... Typescript is creating more issues than it is solving. Code is not meant to be fun, its about maintanability..
@edhahaz
@edhahaz 11 ай бұрын
I love javascript! This is not possible in any other language, I wonder why
@7n7o
@7n7o 11 ай бұрын
1, this is typescript, not javascript 2, many many languages have similar powerful type systems.
@facuflooo
@facuflooo Жыл бұрын
Somebody played with advent of typescript
@joshtriedcoding
@joshtriedcoding Жыл бұрын
haven't had the time for it yet, sounds awesome tho
@facuflooo
@facuflooo Жыл бұрын
@@joshtriedcoding it is really good!
@murtadha96
@murtadha96 Жыл бұрын
I have a feeling that your use case revolved around passing tailwind classes as props safely :))
@joshtriedcoding
@joshtriedcoding Жыл бұрын
yep! Pretty much the same use case as in the video, and I was so glad once it worked well
@avneet12284
@avneet12284 Жыл бұрын
So good
@iamstickfigure
@iamstickfigure 3 ай бұрын
String manipulation in the type system? 👀 The natural progression of course is to also include lowercasing and conversion between camelCase, kebab-case, snake_case, etc. Lol. // (Not real code, btw. Lol.) type LowerCase = S extends lower`${infer R}` ? R : never // This makes no sense, but whatever. Lol. Back to work!
@rikschaaf
@rikschaaf Жыл бұрын
Or you could use enums.
@TejasThombare-rl4du
@TejasThombare-rl4du Жыл бұрын
Waiting for new advanced
@bragancx
@bragancx Жыл бұрын
my brain hurts 🫨
@XxZeldaxXXxLinkxX
@XxZeldaxXXxLinkxX 11 ай бұрын
Yo dog I heard you liked types in your scripts, so I put scripts in your types so you can script your types while you type your scripts
@aymanechaaba
@aymanechaaba Жыл бұрын
Josh, I'm fetching on the server with trpc but mutating on the client with react query and trpc, how to revalidate data in this case?
@27sosite73
@27sosite73 Жыл бұрын
will ai replace me today or tomorrow?
@joelapablaza7722
@joelapablaza7722 Жыл бұрын
I think this is already too much. TypeScript is inspired by C# to make the work more robust yet agile. And this is already too much... it doesn't make sense
@somefin3322
@somefin3322 Жыл бұрын
Makes me really appreciate C# even more.
@genechristiansomoza4931
@genechristiansomoza4931 Жыл бұрын
Isn't that easy in javascript. Throw error if string is not in array.
@Irakli008
@Irakli008 Жыл бұрын
Fun and neat trick, but this is some typescript acrobatics. I would question how sensible it is to do this in a professional environment, with others who might have to work with this code.
@mobix25
@mobix25 Жыл бұрын
hey josh. if it's not too much trouble can you create a project with a real backend service hosted on our pc and make the API accessible publicly. like creating a real server, and there is no full project on YT so PLEASE.
@FranFiori94
@FranFiori94 Жыл бұрын
What is this example lmao
@filipelinharesplus
@filipelinharesplus Жыл бұрын
omfg
@Mayeru
@Mayeru Жыл бұрын
today i learned that Typescript needs to implement enums.
@tiltMOD
@tiltMOD Жыл бұрын
I wonder what's the problem with TS design/documentation that even more seasoned developers from time to time just "find out" new things about it. It's a trend that I haven't seen in other languages/libraries nearly as often as in TS.
@RupluttajaGames
@RupluttajaGames Жыл бұрын
It's all about click bait
@yohendryy
@yohendryy Жыл бұрын
FOR FUCK SAKE JUST USE A MAP
@brain5853
@brain5853 Жыл бұрын
Cool trick but readability is horrible. If someone unfamiliar with the concept took a look at that function parameter typing he'd be like 'wut'
@codeAbinash
@codeAbinash Жыл бұрын
Typescript is a Joke and I Love it 😅.
@venicebeachsurfer
@venicebeachsurfer Жыл бұрын
You glossed over too quickly.. .what does "[number]" explain here? Like, what/how does that work...
@Nicolas-dz1pn
@Nicolas-dz1pn Жыл бұрын
Lets say I have an array of strings, array[number] would try infer all the types inside that array. In his case he was using "as const" so the types would change to immutable ones and for that reason the array[number] gives us a union of every string in the array instead of just the generic type string. type ArrayToUnion = T[number] const colors = ["black", "white"] as const; type ColorUnion = ArrayToUnion // -> 'black' | 'white' I might have missed some points because I didn't actually study that trick properly, just happened to stumble upon that when I was trying to convert a whole array into a union type
@mnikk1
@mnikk1 Жыл бұрын
Imaginary problems. Please stop messing editor speed with complex types that not solve any real problems
@studiowebselect
@studiowebselect Жыл бұрын
kzbin.info/www/bejne/iqS8lnWJa9tnqJosi=8R2-wyjth7p4_4jj&t=239 instead of S you can use "Never" and if the syntax is not good it will throw an typescript error
7 Awesome TypeScript Types You Should Know
8:57
Josh tried coding
Рет қаралды 90 М.
TypeScript Generics are EASY once you know this
22:21
ByteGrad
Рет қаралды 145 М.
小丑女COCO的审判。#天使 #小丑 #超人不会飞
00:53
超人不会飞
Рет қаралды 16 МЛН
The Better Way to Load Images
8:46
Josh tried coding
Рет қаралды 53 М.
How Did I Not Know This TypeScript Trick Earlier??!
9:11
Josh tried coding
Рет қаралды 218 М.
8 TypeScript Tips To Expand Your Mind (and improve your code)
10:54
My Favorite TypeScript Tips and Tricks
10:21
Lachlan Miller
Рет қаралды 8 М.
Enums considered harmful
9:23
Matt Pocock
Рет қаралды 214 М.
What Large-Scale Software Looks Like
18:32
Josh tried coding
Рет қаралды 35 М.
These TypeScript Tricks are POWERFUL
10:44
Jolly Coding
Рет қаралды 4,5 М.
JavaScript Visualized - Event Loop, Web APIs, (Micro)task Queue
12:35
Why Signals Are Better Than React Hooks
16:30
Web Dev Simplified
Рет қаралды 493 М.
How Senior Programmers ACTUALLY Write Code
13:37
Thriving Technologist
Рет қаралды 1,6 МЛН