All Lessons

Every lesson is a story.
Every story teaches two languages.

Pick a level and start reading. New lessons added weekly.

๐ŸŒฑ

Beginner

8 lessons

No assumptions. Just code and English, side by side.

Beginner
โฑ 5mโšก 50 XP

Variables & Meaning โ€” Why Names Matter

ๅ˜้‡ไธŽๅซไน‰ โ€” ไธบไป€ไนˆๅ‘ฝๅๅฆ‚ๆญค้‡่ฆ

Good variable names are just good English sentences waiting to happen. In this lesson, you'll learn how TypeScript develโ€ฆ

#variables#naming#beginner
Beginner
โฑ 6mโšก 60 XP

Functions in Plain English

็”จ็ฎ€ๅ•่‹ฑ่ฏญ็†่งฃๅ‡ฝๆ•ฐ

A function is a promise. It takes something, does something, and returns something. Learn how TypeScript makes those proโ€ฆ

#functions#types#beginner
Beginner
โฑ 7mโšก 70 XP

Reading Error Messages Like a Native

ๅƒๆฏ่ฏญ่€…ไธ€ๆ ท่ฏปๆ‡‚้”™่ฏฏไฟกๆฏ

TypeScript's error messages are written in English โ€” and they're actually trying to help you. Learn to decode them, and โ€ฆ

#errors#debugging#beginner
Beginner
๐Ÿ”’ Proโฑ 6mโšก 60 XP

Interface vs Type โ€” The Great TypeScript Debate

Interface vs Type โ€” TypeScript ๆœ€็ƒญ้—จ็š„ไบ‰่ฎบ

Every TypeScript developer eventually asks: 'Should I use interface or type?' The answer reveals something deep about hoโ€ฆ

#interface#type#beginner
Beginner
๐Ÿ”’ Proโฑ 5mโšก 50 XP

Optional Chaining โ€” 'If It Exists, Then...'

ๅฏ้€‰้“พ โ€” ใ€Œๅฆ‚ๆžœๅญ˜ๅœจ๏ผŒ้‚ฃไนˆโ€ฆใ€

The `?.` operator is TypeScript's polite way of asking: 'does this exist? If yes, continue. If no, just return undefinedโ€ฆ

#optional-chaining#nullish#beginner
Beginner
๐Ÿ”’ Proโฑ 6mโšก 60 XP

Array Methods โ€” English Verbs in Code

ๆ•ฐ็ป„ๆ–นๆณ• โ€” ไปฃ็ ้‡Œ็š„่‹ฑ่ฏญๅŠจ่ฏ

JavaScript array methods read like English sentences: 'find the user', 'filter the active ones', 'map each item to its tโ€ฆ

#arrays#methods#beginner
Beginner
๐Ÿ”’ Proโฑ 8mโšก 100 XP

Git Commit Messages โ€” Writing History

Git Commit Messages โ€” ไนฆๅ†™ๅކๅฒ

Your commit history is a story. Learn the Conventional Commits standard, imperative mood, and how to write messages thatโ€ฆ

#git#commits#conventions
Beginner
๐Ÿ”’ Proโฑ 9mโšก 110 XP

Writing README Files โ€” Your Project's Front Door

ๅ†™ README ๆ–‡ไปถ โ€” ้กน็›ฎ็š„้—จ้ข

A great README is the difference between a project people use and a project people ignore. Learn the structure, vocabulaโ€ฆ

#readme#documentation#open-source
๐ŸŒฟ

Intermediate

13 lessons

You know the basics. Now read code like a native.

Intermediate
โฑ 8mโšก 80 XP

Generics โ€” The Art of 'Whatever Type You Bring'

ๆณ›ๅž‹ โ€” ใ€Œ้šไฝ ๅธฆๆฅไป€ไนˆ็ฑปๅž‹ใ€็š„่‰บๆœฏ

Generics are TypeScript's way of saying 'I don't care what type you use, but whatever you give me, I'll give you back thโ€ฆ

#generics#intermediate#typescript
Intermediate
โฑ 8mโšก 80 XP

Async/Await โ€” Speaking to the Future

Async/Await โ€” ๅฏน่ฏๆœชๆฅ

Asynchronous code is everywhere in modern development. Learn how `async/await` makes your code read like a natural Engliโ€ฆ

#async#promises#intermediate
Intermediate
โฑ 7mโšก 70 XP

Union Types โ€” Either/Or in Code

่”ๅˆ็ฑปๅž‹ โ€” ไปฃ็ ้‡Œ็š„ใ€Œ้žๆญคๅณๅฝผใ€

Union types let a value be one of several things. The English word 'or' maps directly to TypeScript's `|`. Master this aโ€ฆ

#union#literal#intermediate
Intermediate
๐Ÿ”’ Proโฑ 7mโšก 75 XP

Type Narrowing โ€” Ruling Out Possibilities

็ฑปๅž‹ๆ”ถ็ช„ โ€” ๆŽ’้™คๅฏ่ƒฝๆ€ง

TypeScript gets smarter as you write conditions. 'Narrowing' is when the type gets more specific inside an if-block โ€” liโ€ฆ

#narrowing#guards#intermediate
Intermediate
๐Ÿ”’ Proโฑ 8mโšก 80 XP

Error Handling โ€” Speaking About Failure Clearly

้”™่ฏฏๅค„็† โ€” ๆธ…ๆ™ฐๅœฐ่ฐˆ่ฎบๅคฑ่ดฅ

How you handle errors reveals how you think about failure. TypeScript's error patterns map to everyday English phrases aโ€ฆ

#errors#try-catch#intermediate
Intermediate
๐Ÿ”’ Proโฑ 7mโšก 75 XP

React Props โ€” Typing What You Pass

React Props โ€” ็ป™ไฝ ไผ ้€’็š„ไธœ่ฅฟๅŠ ็ฑปๅž‹

Props are how React components talk to each other. TypeScript makes that conversation explicit โ€” every prop has a type, โ€ฆ

#react#props#intermediate
Intermediate
๐Ÿ”’ Proโฑ 7mโšก 70 XP

Reading npm Docs โ€” The Developer's English Skill

่ฏป npm ๆ–‡ๆกฃ โ€” ๅผ€ๅ‘่€…่‹ฑ่ฏญ็š„ๆ ธๅฟƒๆŠ€่ƒฝ

Every library you use has a README. Reading it efficiently is perhaps the most valuable English skill a developer can haโ€ฆ

#npm#docs#intermediate
Intermediate
๐Ÿ”’ Proโฑ 10mโšก 120 XP

Generics โ€” Write Once, Use Everywhere

ๆณ›ๅž‹ โ€” ๅ†™ไธ€ๆฌก๏ผŒๅˆฐๅค„็”จ

Generics let you write flexible, reusable functions without sacrificing type safety. This lesson explores generic functiโ€ฆ

#generics#type-safety#reusable-code
Intermediate
๐Ÿ”’ Proโฑ 12mโšก 130 XP

Async/Await โ€” Taming Asynchronous Code

Async/Await โ€” ้ฉฏๆœๅผ‚ๆญฅไปฃ็ 

Master the English vocabulary of asynchronous programming: promises, callbacks, race conditions, and concurrent executioโ€ฆ

#async#promises#error-handling
Intermediate
๐Ÿ”’ Proโฑ 8mโšก 100 XP

Enums vs Union Types โ€” Choosing the Right Tool

Enums vs ่”ๅˆ็ฑปๅž‹ โ€” ้€‰ๆ‹ฉๆญฃ็กฎ็š„ๅทฅๅ…ท

TypeScript offers both enums and string union types. Learn when to use each, understand tree-shaking implications, and rโ€ฆ

#enums#unions#patterns
Intermediate
๐Ÿ”’ Proโฑ 10mโšก 120 XP

Zod โ€” Runtime Validation with Type Inference

Zod โ€” ๅธฆ็ฑปๅž‹ๆŽจๆ–ญ็š„่ฟ่กŒๆ—ถ้ชŒ่ฏ

Zod bridges the gap between compile-time types and runtime data. Learn how to validate API responses, form inputs, and eโ€ฆ

#zod#validation#type-inference
Intermediate
๐Ÿ”’ Proโฑ 9mโšก 110 XP

RESTful API Naming โ€” Speaking HTTP Fluently

RESTful API ๅ‘ฝๅ โ€” ๆตๅˆฉๅœฐ่ฏด HTTP

Good API design reads like natural English. Learn the conventions behind resource naming, HTTP verbs, status codes, and โ€ฆ

#rest#api-design#http
Intermediate
๐Ÿ”’ Proโฑ 9mโšก 110 XP

Code Review Etiquette โ€” Giving and Receiving Feedback

Code Review ็คผไปช โ€” ็ป™ไบˆๅ’ŒๆŽฅๅ—ๅ้ฆˆ

Code review is a conversation, not a judgment. Learn the professional English phrases used in code reviews, from requestโ€ฆ

#code-review#communication#teamwork
๐ŸŒณ

Advanced

4 lessons

Ship code and words at the same time.

Advanced
๐Ÿ”’ Proโฑ 9mโšก 90 XP

Utility Types โ€” TypeScript's Built-in Vocabulary

ๅทฅๅ…ท็ฑปๅž‹ โ€” TypeScript ๅ†…็ฝฎ็š„่ฏๆฑ‡่กจ

TypeScript ships with a library of 'utility types' that transform existing types. Each one has an English name that descโ€ฆ

#utility-types#advanced#typescript
Advanced
๐Ÿ”’ Proโฑ 8mโšก 90 XP

Writing PR Descriptions โ€” Your Voice on the Team

ๅ†™ PR ๆ่ฟฐ โ€” ไฝ ๅœจๅ›ข้˜Ÿไธญ็š„ๅฃฐ้Ÿณ

A great pull request description is like a short story: what changed, why it changed, and how to verify it. Mastering thโ€ฆ

#git#pr#advanced
Advanced
๐Ÿ”’ Proโฑ 10mโšก 140 XP

Decorator Pattern โ€” Wrapping Behavior Elegantly

่ฃ…้ฅฐๅ™จๆจกๅผ โ€” ไผ˜้›…ๅœฐๅŒ…่ฃ…่กŒไธบ

Decorators add functionality to functions and classes without modifying them. Learn the vocabulary of metaprogramming anโ€ฆ

#decorators#patterns#metaprogramming
Advanced
๐Ÿ”’ Proโฑ 11mโšก 140 XP

Observer Pattern โ€” Events, Signals, and Reactivity

่ง‚ๅฏŸ่€…ๆจกๅผ โ€” ไบ‹ไปถใ€ไฟกๅทๅ’Œๅ“ๅบ”ๅผ

The Observer pattern is everywhere: DOM events, React state, RxJS, Zustand. Learn the vocabulary of publish-subscribe anโ€ฆ

#design-patterns#events#reactivity