Learn how to unleash the full potential of the Turing Complete type system of TypeScript!
Introduction
Type-level TypeScript is an online course to take your TypeScript skills from intermediate to advanced. It will give you a solid understanding of the type system's fundamentals and guide you through its most advanced features. You will find everything you need to become a TypeScript Expert — not only in-depth content, but also fun challenges to practice your new skills, like this one right here.
Let's see if you can solve it!
Congratulation! 🎉
Over the years, the type system of TypeScript has grown from basic type annotations to a large and complex programming language. If you have ever looked into the code of an open-source library you may have found types that looked intimidating and foreign, like some esoteric language coming from another planet. Library code often needs to be much more abstract than the code we are used to writing; that's why it makes extensive usage of advanced TypeScript features such as Generics, Conditional Types, Mapped Types or even Recursive Types. I mastered these concepts while working on TS-Pattern, a widely-used open-source library that has the particularity of being extremely hard to type. In this course, I hope to share what I've learned by reading too much source code and tinkering for hundreds of hours with the type system.
Types are awesome for many reasons:
- They document the code.
- They make developers more proficient by providing them with smart suggestions.
- They catch mistakes and typos.
The more the type system knows about your code, the better it is at helping you! Once you're fluent in the language of types, everything becomes possible. You will no longer feel like the type system restrains your ability to write the abstractions you need.
Want to check if your route parameters are passed correctly? Here you go:
This isn't magic. The type system is just a real programming language!
To get better at this, we first need to acknowledge that TypeScript's type system is a full-fledged programming language in itself! It's more than worth learning its fundamentals, just like we would with any other new programming language. Throughout this course, I'll try to show the correspondence between programming concepts you already know like code branching, variable assignment, loops and data structures, and their type-level equivalent. By assembling these building blocks, you will be able to create powerful type-level algorithms that make sure the abstractions you create are always used properly in your entire codebase.
Let's take your TypeScript skills to the next level!
1
Types & ValuesFree
Free
Learn the similarities and differences between the language of types and the language of values.
2
Types are just dataFree
Free
Let's take a look at the data structures at our disposal in Type-level TypeScript.
3
Objects & RecordsFree
Free
Learn how to use Object and Record types, two of the most useful data structures of Type-level TypeScript.
4
Arrays & TuplesFree
Free
Learn how to create, use, and merge Array and Tuple types.
5
Conditional Types
Let's create our first type-level algorithms using conditional types for code branching! Learn all about the extends and the infer keywords.
6
Loops with Recursive Types
Learn how to use recursion to loop through types and build powerful type-level algorithms.
7
Template Literal Types
Learn how to interpolate, parse and generate string types, and how to build your first type-safe Domain-Specific Language!
8
The Union Type Multiverse
Learn how to use union types efficiently and how to transform, filter, and generate complex types from them.
9
Loops with Mapped Types
Learn how to use Mapped Types to transform Objects and Tuples in a composable way.
10
Assignability Quiz
Assignability is everywhere in TypeScript. Let's explore its inner-workings through the best way I know — playing a game!
11
Designing Type-Safe APIs
Learn how the best Open-Source TypeScript libraries design delightful interfaces with custom error messages and great auto-complete suggestions.
12
Conclusion
It is time to let you continue your TypeScript journey on your own. Before we say good bye, let's pause to consider how far we've gone, and what's still on the horizon!
Finally, we will see that moving more of the complexity of your code to the type level is a trade-off. We will talk about compile time performance, type errors, type-level debugging and other challenges of type-level programming. It will help you reflect and take the right decision when using these techniques.
It's worth noting that this course isn't a collection of TypeScript tricks! I believe that building a good mental model of the fundamentals is more empowering because it will help you solve problems we haven't covered. Knowing a few tricks can only get you so far, but mastering the building blocks of the language and the way they interact together will enable you to solve your real-world problems.
Let's get started!
Enroll in Type-Level TypeScript!
Get access to all chapters of the Type-Level TypeScript course and join a community of 1600+ students!
You will find everything you need to become a TypeScript Expert — 11 chapters of in-depth, unique content, and more than 70 fun challenges to practice your new skills.
Full access to all 11 chapters
70 type challenges with explanations
Lifetime access to all course materials
Exclusive discord community
Loading...