Dylan Hunn Profile picture
Dec 8 5 tweets 2 min read
In #Angular Typed Forms, the `get` method takes a string with dot-separated control names, and returns a fully typed value. How is this possible?

We can actually parse the argument at compile time, using the magic of #TypeScript template literal types! Let's see how it works. 🧵 let party = fb.nonNullable....
Imagine you have a type listing various products, and you want to automatically generate a type for corresponding database columns.

We define a template literal type called DatabaseColumn. It takes any subtype of string, and maps each element onto a string with a column prefix. type Products = 'Food'|'Clo...
The previous example generates a string type by concatenation. However, can we also go the other direction, breaking apart a string type?

The answer is yes! Using the `infer` keyword, we can implement a simple parser. This `ProductFrom` type extracts product names from columns. type Columns = 'Column_Food...
Let's implement a tokenizer with our new knowledge.

This type splits a string, similar to the previous example. We look for the first dot as the split point.

The result is the first token, followed by the recursive tokenization of the remainder. type Tokenize<S extends str...
Angular's `get` method tokenizes its argument using this technique. Then, we can check for the specified property at compile time.

(P.S. Follow me for more about TypeScript and Angular!)

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Dylan Hunn

Dylan Hunn Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(