Matt Pocock Profile picture
Apr 1, 2022 30 tweets 7 min read Read on X
🧵 The Ultimate TypeScript Thread 🧵

Here's everything I've learned from leading TS dev teams and working on XState's core team.

My goal is to turn you into a TypeScript wizard.

And yes, this thread is EVERGREEN - I'll add at least 3 more tips a week 🚀

Let's get started.

• • •

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

Keep Current with Matt Pocock

Matt Pocock 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!

More from @mattpocockuk

Mar 7
MCP has ALREADY become an overloaded term.

Let's break it down into clients, servers and protocols: Image
MCP is built out of three ideas.

You have a client, a server, and a protocol to connect them together. Let's define each of them in turn.
The server is the thing that chats to the API's.

It can be on a remote server (i.e. in the cloud), or on your local system.

It contains all the code needed to actually take actions on the systems it talks to - sending Slack messages, creating files etc. Image
Read 7 tweets
Mar 6
Lots of folks feeling FOMO about MCP.

Here's the problem it solves: Image
Image
If you want to get your LLM to do useful things in the world, you will quickly hit a problem.

All the useful things in the world, like Slack, GitHub, or even your local filesystem, provide their own unique API to access them.
So, you end up writing a ton of code to glue your LLM and those API's together.

Want to add a new tool? That's more glue code. Grim.
Read 6 tweets
Oct 1, 2024
z.strict() fixed a nasty bug for me this morning.

You should probably be using it on most of the schemas that handle outside data.

Here's the bug 🧵 Image
I had a form where I was marking the date a post was posted. I was expecting a key of `postedAt`, with an optional datetime. Image
Except, in my form, I had gotten the `name` field wrong: Image
Read 7 tweets
Aug 20, 2024
Narrowing down the types of values is key knowledge for any TypeScript dev.

Here's 11 different ways you can do it. I bet you won't know 2 or 3 of them!

🧵
Narrowing with typeof: Image
Narrowing with truthiness: Image
Read 13 tweets
Aug 8, 2024
So many folks don't know about structuredClone.

It's awesome, built-in, and supported in all major browsers.

Let's learn 🧵 Image
A common pattern in JavaScript is to create an immutable clone of an object. This is useful when you want to make mutations to it without changing the original.

For that, you'll often see code using the spread operator: `{ ...obj }`. Image
However, this only creates a shallow clone. This means that if the object has nested objects, they will be shared between the original and the clone.

Here, `deep` is shared between `originalObj` and `newObj`, not cloned across. Image
Read 10 tweets
Aug 7, 2024
I'm starting to think that library types in TypeScript are all wrong.

Instead of top-level types, they should be available right on the functions that use them.

Brief thread 🧵 Image
How is this possible? Well, it's due to a trick in the way namespaces work in TypeScript.

When you export a namespace with the same name as a function, TypeScript combines the two: Image
This still works with 'import type', too: Image
Read 4 tweets

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!

:(