TypeScript Cookbook
JavaScript & TypeScript

TypeScript Cookbook

Stefan Baumgartner, 2023

Inhaltsverzeichnis des Buches

  • Foreword
  • Preface
  • Who This Book Is For
  • What’s in This Book?
  • Organization of This Book
  • Conventions Used in This Book
  • Using Code Examples
  • O’Reilly Online Learning
  • How to Contact Us
  • Acknowledgments
  • 1. Project Setup
  • 1.1. Type-Checking JavaScript
  • 1.2. Installing TypeScript
  • 1.3. Keeping Types on the Side
  • 1.4. Migrating a Project to TypeScript
  • 1.5. Loading Types from Definitely Typed
  • 1.6. Setting Up a Full-Stack Project
  • 1.7. Setting Up Tests
  • 1.8. Typing ECMAScript Modules from URLs
  • 1.9. Loading Different Module Types in Node
  • 1.10. Working with Deno and Dependencies
  • 1.11. Using Predefined Configurations
  • 2. Basic Types
  • 2.1. Annotating Effectively
  • 2.2. Working with any and unknown
  • 2.3. Choosing the Right Object Type
  • 2.4. Working with Tuple Types
  • 2.5. Understanding Interfaces Versus Type Aliases
  • 2.6. Defining Function Overloads
  • 2.7. Defining this Parameter Types
  • 2.8. Working with Symbols
  • 2.9. Understanding Value and Type Namespaces
  • 3. The Type System
  • 3.1. Modeling Data with Union and Intersection Types
  • 3.2. Explicitly Defining Models with Discriminated Union Types
  • 3.3. Exhaustiveness Checking with the Assert never Technique
  • 3.4. Pinning Types with Const Context
  • 3.5. Narrowing Types with Type Predicates
  • 3.6. Understanding void
  • 3.7. Dealing with Error Types in catch Clauses
  • 3.8. Creating Exclusive Or Models with Optional never
  • 3.9. Effectively Using Type Assertions
  • 3.10. Using Index Signatures
  • 3.11. Distinguishing Missing Properties and Undefined Values
  • 3.12. Working with Enums
  • 3.13. Defining Nominal Types in a Structural Type System
  • 3.14. Enabling Loose Autocomplete for String Subsets
  • 4. Generics
  • 4.1. Generalizing Function Signatures
  • 4.2. Creating Related Function Arguments
  • 4.3. Getting Rid of any and unknown
  • 4.4. Understanding Generic Instantiation
  • 4.5. Generating New Object Types
  • 4.6. Modifying Objects with Assertion Signatures
  • 4.7. Mapping Types with Type Maps
  • 4.8. Using ThisType to Define this in Objects
  • 4.9. Adding Const Context to Generic Type Parameters
  • 5. Conditional Types
  • 5.1. Managing Complex Function Signatures
  • 5.2. Filtering with never
  • 5.3. Grouping Elements by Kind
  • 5.4. Removing Specific Object Properties
  • 5.5. Inferring Types in Conditionals
  • 6. String Template Literal Types
  • 6.1. Defining a Custom Event System
  • 6.2. Creating Event Callbacks with String Manipulation Types and Key Remapping
  • 6.3. Writing a Formatter Function
  • 6.4. Extracting Format Parameter Types
  • 6.5. Dealing with Recursion Limits
  • 6.6. Using Template Literals as Discriminants
  • 7. Variadic Tuple Types
  • 7.1. Typing a concat Function
  • 7.2. Typing a promisify Function
  • 7.3. Typing a curry Function
  • 7.4. Typing a Flexible curry Function
  • 7.5. Typing the Simplest curry function
  • 7.6. Creating an Enum from a Tuple
  • 7.7. Splitting All Elements of a Function Signature
  • 8. Helper Types
  • 8.1. Setting Specific Properties Optional
  • 8.2. Modifying Nested Objects
  • 8.3. Remapping Types
  • 8.4. Getting All Required Keys
  • 8.5. Allowing at Least One Property
  • 8.6. Allowing Exactly One and All or None
  • 8.7. Converting Union to Intersection Types
  • 8.8. Using type-fest
  • 9. The Standard Library and External Type Definitions
  • 9.1. Iterating over Objects with Object.keys
  • 9.2. Explicitly Highlighting Unsafe Operations with Type Assertions and unknown
  • 9.3. Working with defineProperty
  • 9.4. Expanding Types for Array.prototype.includes
  • 9.5. Filtering Nullish Values
  • 9.6. Extending Modules
  • 9.7. Augmenting Globals
  • 9.8. Adding Non-JS Modules to the Module Graph
  • 10. TypeScript and React
  • 10.1. Writing Proxy Components
  • 10.2. Writing Controlled Components
  • 10.3. Typing Custom Hooks
  • 10.4. Typing Generic forwardRef Components
  • 10.5. Providing Types for the Context API
  • 10.6. Typing Higher-Order Components
  • 10.7. Typing Callbacks in React’s Synthetic Event System
  • 10.8. Typing Polymorphic Components
  • 11. Classes
  • 11.1. Choosing the Right Visibility Modifier
  • 11.2. Explicitly Defining Method Overrides
  • 11.3. Describing Constructors and Prototypes
  • 11.4. Using Generics in Classes
  • 11.5. Deciding When to Use Classes or Namespaces
  • 11.6. Writing Static Classes
  • 11.7. Working with Strict Property Initialization
  • 11.8. Working with this Types in Classes
  • 11.9. Writing Decorators
  • 12. Type Development Strategies
  • 12.1. Writing Low Maintenance Types
  • 12.2. Refining Types Step by Step
  • 12.3. Checking Contracts with satisfies
  • 12.4. Testing Complex Types
  • 12.5. Validating Data Types at Runtime with Zod
  • 12.6. Working Around Index Access Restrictions
  • 12.7. Deciding Whether to Use Function Overloads or Conditional Types
  • 12.8. Naming Generics
  • 12.9. Prototyping on the TypeScript Playground
  • 12.10. Providing Multiple Library Versions
  • 12.11. Knowing When to Stop
  • Index
  • About the Author