Skill Roadmap

TypeScript

TypeScript layers a static type system on top of JavaScript, catching bugs at compile time and making large codebases easier to navigate and refactor. This roadmap walks you from setup and the core type system through interfaces, classes, generics, and the advanced types that power modern TypeScript codebases.

TypeScript vs JavaScript

A superset, not a replacement — TypeScript compiles down to plain JavaScript

TypeScript is a typed superset of JavaScript — every valid JavaScript file is already valid TypeScript. What TypeScript adds is a static type system that catches whole classes of bugs (wrong argument types, typos on object properties, unhandled null values) before the code ever runs, rather than as a runtime surprise.

Because TypeScript compiles down to plain JavaScript, it runs anywhere JavaScript already runs — the browser, Node.js, or any JS runtime — and interoperates directly with existing JavaScript libraries, with or without type definitions.

The tradeoff is a build step: TypeScript needs to be compiled (typically with tsc) before it runs, though tools like ts-node let you execute it directly during development.

The TypeScript Roadmap

Work through these in order, from setup to the advanced type system

STEP 1
TypeScript logo

TypeScript Basics

Get TypeScript installed, configured, and running before touching the type system.

TS and JS Interoperability Installation and Configuration tsconfig.json Compiler Options
Running TypeScript
STEP 2

TypeScript Types

The vocabulary of the type system — from primitives to the types at the very top and bottom.

Primitive Types
boolean number string void undefined null
Object Types
Interface Class Enum Array Tuple
Top Types
Object unknown any
Bottom Types
never
STEP 3

Assertions & Type Inference

Tell the compiler what you know, and understand what it can already infer on its own.

Assertions
as const as [type] as any Non-null Assertion satisfies keyword
Type Inference Type Compatibility
STEP 4

Combining Types

Build new types out of existing ones instead of repeating yourself.

Union Types Intersection Types Type Aliases keyof Operator
STEP 5

Type Guards / Narrowing

Help the compiler narrow a broad type down to something specific within a branch of code.

instanceof typeof Equality Truthiness Type Predicates
STEP 6
fx logo

TypeScript Functions

Type parameters and return values, and handle functions with more than one valid signature.

Typing Functions Function Overloading
STEP 7

TypeScript Interfaces

Describe the shape of an object — and know when to reach for an interface over a type alias.

Types vs Interfaces Extending Interfaces Interface Declaration Hybrid Types
STEP 8

Classes

Bring object-oriented patterns to TypeScript with full type checking on top.

Constructor Params Constructor Overloading Access Modifiers Abstract Classes Inheritance vs Polymorphism Method Overriding
STEP 9

Generics

Write reusable, type-safe code that works across many types instead of just one.

Generic Types Generic Constraints
STEP 10

Utility Types & Decorators

Built-in helpers that transform existing types, plus metadata annotations for classes.

Partial Pick Omit Readonly Record Exclude Extract Parameters Awaited NonNullable ReturnType InstanceType Decorators
STEP 11

Advanced Types

Where TypeScript's type system stops describing data and starts computing with it.

Mapped Types Conditional Types Literal Types Template Literal Types Recursive Types
STEP 12

Modules & Ecosystem

Organize code across files, and the tooling that keeps a TypeScript codebase consistent.

TypeScript Modules
Namespaces Ambient Modules External Modules Namespace Augmentation Global Augmentation
Ecosystem
Formatting Linting Useful Packages Build Tools

GitHub Projects

Real, buildable projects to put on your own GitHub

Frequently Asked Questions

Common questions from people starting out with TypeScript

Do I need to learn JavaScript before TypeScript?

Yes — TypeScript is a superset of JavaScript, so its syntax, runtime behavior, and ecosystem are all built directly on JavaScript. A solid grasp of JavaScript fundamentals makes the type system click much faster.

What's the difference between types and interfaces?

Interfaces are generally used to describe the shape of objects and can be extended or merged across declarations, while type aliases can describe any type — including unions, primitives, and tuples — but can't be reopened once declared. In most everyday cases the two are interchangeable.

Does TypeScript run directly, or does it need to be compiled?

TypeScript is compiled down to plain JavaScript before it runs — typically with the tsc compiler. Tools like ts-node compile and run it in one step during development, which is convenient but still involves that same compilation under the hood.

What is type narrowing?

Narrowing is how TypeScript refines a broad type — like a union — down to a more specific one within a branch of code, based on checks such as typeof, instanceof, or a custom type predicate function.

What are utility types for?

Utility types like Partial, Pick, and Omit let you derive a new type from an existing one instead of redefining it from scratch — useful for things like optional update payloads or trimmed-down API response shapes.

Is TypeScript worth it for small projects?

It depends on how long the project will live and how many people will touch it. The type system pays off most on codebases that grow, get refactored, or are shared across a team — for a quick throwaway script, plain JavaScript is often simpler.

Track complete

From tsconfig and primitive types to generics, advanced types, and modules — that's the core of what's expected of any TypeScript developer. Keep building, and put it to work in a real frontend or backend project.

Where next?

Keep exploring by domain or drill into a single skill