The "when NOT to reach for a generic" lesson has already improved two code reviews on my team. Dev is unusually good at explaining the cost of a clever type, which nobody else does.
TypeScript for Teams
Types that catch real bugs and stay out of the way — for codebases with more than one author.
- 11 hours of video
- 7 hands-on projects
- A migration playbook
- Lifetime access
- Certificate of completion
43% of the running time is hands-on — projects and quizzes rather than video.
What you'll learn
Read an error to its cause
Work a compiler message back to what is actually wrong, instead of reaching for any and moving on.
Design types for other people
Write types a teammate can extend without asking you first — types that document the API rather than obstruct it.
Turn on strict mode safely
Migrate a large codebase file by file with a ratchet, and never stop shipping to do it.
Use generics where they earn it
Generics and conditional types cost readability. Learn where that price is worth paying and where it is not.
Make the boundary honest
Type an API edge so a backend change breaks the build rather than production.
What’s inside
Every figure below is summed from the lesson list, not estimated — so the chart and the curriculum can never disagree.
| Content type | Minutes | Share |
|---|---|---|
| Video lessons | 360 | 57.4% |
| Hands-on projects | 245 | 39.1% |
| Quizzes | 22 | 3.5% |
43% of this course is hands-on.
Curriculum
4 sections · 18 lessons · 10h total
What the compiler is actually doing, so the errors stop being mysterious.
- VideoStructural typing, and why it surprises people
- VideoReading an error from the bottom up
- VideoNarrowing: the feature you use most and understand least
- QuizGround rules quiz
The difference between a type that documents and one that obstructs.
- VideoDiscriminated unions as an API design tool
- VideoGenerics: when, and how far
- VideoConditional and mapped types without the write-only code
- VideoBranded types for ids that must not mix
- ProjectProject: type a component library API
Where the types stop being true and what to do about it.
- VideoParsing, not casting, at the network edge
- VideoTyping a REST client so the backend cannot lie
- Videounknown, never, and the honest use of any
- ProjectProject: a fully typed data layer
- QuizBoundaries quiz
Incremental, reviewable, and nobody has to stop shipping.
- VideoMeasuring the real size of the problem
- VideoFile-by-file strictness with a ratchet
- VideoCodemods that are safe to review
- ProjectProject: migrate a 400-file package
Dev Raghunathan
Staff engineer · type systems and developer tooling
Dev maintains three widely-used TypeScript codemods and has opinions about all of them. He came to teaching after watching the same four type errors block the same four teams, and now spends his time turning compiler messages into things a human can act on.
Compiler infrastructure at Lumen
CompletedOwned the build for a 900-package monorepo.
Open source
CompletedAuthor of ts-migrate-strict, 8k stars.
Conference circuit
In progressTalks at TSConf, JSNation and Frontend Masters.
What learners said
5,400 ratings from people who bought this course.
5,400 ratings
- 5 stars
- 4 stars
- 3 stars
- 2 stars
- 1 star
We used the ratchet approach from module 4 on a genuinely horrible legacy package. Six weeks, no freeze, strict everywhere. I have sent this course to every engineer we hire.
Very strong on design and migration. A little thin on decorators and older config styles, which I still have to deal with. Worth it anyway.
Learners also took
Same category first, then whatever pairs well with it.
React Server Components, Properly
The boundary, the payload and the render — what actually happens between the server and the browser.
Ship It: Next.js 16 from Zero to Production
Build and deploy a real application on the App Router — async request APIs, streaming, caching and the deploy that follows.
CSS Without a Framework
Modern layout, custom properties and container queries — the browser is the framework now.
Browse the full course catalogue, or see how this page is put together on Built with VivekUI.