Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Effective TypeScript

This is the code sample repo for the Effective TypeScript: 83 Specific Ways to Improve Your TypeScript (O'Reilly, May 2024). The book is available through:

and others. You can get the latest updates on the book at effectivetypescript.com.

Still on the first edition? Check out the 1st-edition branch.

Code Samples

Below you'll find a complete table of contents. Each item links to a page with its "Things to Remember" (a short summary of the item) and a listing of all its code samples. The code samples are accompanied by links to the TypeScript playground. They should produce the expected errors (and no others) and expected types.

Unless otherwise noted in a comment at the top of the code sample, the samples are run with TypeScript's strict setting. These were produced and checked using literate-ts and TypeScript 5.4.5.

  • Chapter 1: Getting to Know TypeScript

    • 📝 Item 1: Understand the Relationship Between TypeScript and JavaScript
    • 📝 Item 2: Know Which TypeScript Options You're Using
    • 📝 Item 3: Understand That Code Generation Is Independent of Types
    • 📝 Item 4: Get Comfortable with Structural Typing
    • 📝 Item 5: Limit Use of the any Type
  • Chapter 2: TypeScript's Type System

    • 📝 Item 6: Use Your Editor to Interrogate and Explore the Type System
    • 📝 Item 7: Think of Types as Sets of Values
    • 📝 Item 8: Know How to Tell Whether a Symbol Is in the Type Space or Value Space
    • 📝 Item 9: Prefer Type Annotations to Type Assertions
    • 📝 Item 10: Avoid Object Wrapper Types (String, Number, Boolean, Symbol, BigInt)
    • 📝 Item 11: Distinguish Excess Property Checking from Type Checking
    • 📝 Item 12: Apply Types to Entire Function Expressions When Possible
    • 📝 Item 13: Know the Differences Between type and interface
    • 📝 Item 14: Use readonly to Avoid Errors Associated with Mutation
    • 📝 Item 15: Use Type Operations and Generic Types to Avoid Repeating Yourself
    • 📝 Item 16: Prefer More Precise Alternatives to Index Signatures
    • 📝 Item 17: Avoid Numeric Index Signatures
  • Chapter 3: Type Inference and Control Flow Analysis

  • Chapter 4: Type Design

  • Chapter 5: Unsoundness and the any Type

    • 📝 Item 43: Use the Narrowest Possible Scope for any Types
    • 📝 Item 44: Prefer More Precise Variants of any to Plain any
    • 📝 Item 45: Hide Unsafe Type Assertions in Well-Typed Functions
    • 📝 Item 46: Use unknown Instead of any for Values with an Unknown Type
    • 📝 Item 47: Prefer Type-Safe Approaches to Monkey Patching
    • 📝 Item 48: Avoid Soundness Traps
    • 📝 Item 49: Track Your Type Coverage to Prevent Regressions in Type Safety
  • Chapter 6: Generics and Type-Level Programming

  • Chapter 7: TypeScript Recipes

  • Chapter 8: Type Declarations and @types

  • Chapter 9: Writing and Running Your Code

  • Chapter 10: Modernization and Migration

    • 📝 Item 79: Write Modern JavaScript
    • 📝 Item 80: Use @ts-check and JSDoc to Experiment with TypeScript
    • 📝 Item 81: Use allowJs to Mix TypeScript and JavaScript
    • 📝 Item 82: Convert Module by Module Up Your Dependency Graph
    • 📝 Item 83: Don't Consider Migration Complete Until You Enable noImplicitAny

About

Effective TypeScript 2nd Edition: 83 Specific Ways to Improve Your TypeScript

Topics

Resources

Stars

1.8k stars

Watchers

20 watching

Forks

Releases

Packages

Used by

Contributors