JavaScript & TypeScript
Effective TypeScript: 62 Specific Ways to Improve Your TypeScript
Dan Vanderkam, 2019
Inhaltsverzeichnis des Buches
- Preface
- Who This Book Is For
- Why I Wrote This Book
- How This Book Is Organized
- Conventions in TypeScript Code Samples
- Typographical Conventions Used in This Book
- Using Code Examples
- O’Reilly Online Learning
- How to Contact Us
- Acknowledgments
- 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
- 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 Declarations to Type Assertions
- Item 10: Avoid Object Wrapper Types (String, Number, Boolean, Symbol, BigInt)
- Item 11: Recognize the Limits of Excess Property Checking
- Item 12: Apply Types to Entire Function Expressions When Possible
- Item 13: Know the Differences Between type and interface
- Item 14: Use Type Operations and Generics to Avoid Repeating Yourself
- Item 15: Use Index Signatures for Dynamic Data
- Item 16: Prefer Arrays, Tuples, and ArrayLike to number Index Signatures
- Item 17: Use readonly to Avoid Errors Associated with Mutation
- Item 18: Use Mapped Types to Keep Values in Sync
- 3. Type Inference
- Item 19: Avoid Cluttering Your Code with Inferable Types
- Item 20: Use Different Variables for Different Types
- Item 21: Understand Type Widening
- Item 22: Understand Type Narrowing
- Item 23: Create Objects All at Once
- Item 24: Be Consistent in Your Use of Aliases
- Item 25: Use async Functions Instead of Callbacks for Asynchronous Code
- Item 26: Understand How Context Is Used in Type Inference
- Item 27: Use Functional Constructs and Libraries to Help Types Flow
- 4. Type Design
- Item 28: Prefer Types That Always Represent Valid States
- Item 29: Be Liberal in What You Accept and Strict in What You Produce
- Item 30: Don’t Repeat Type Information in Documentation
- Item 31: Push Null Values to the Perimeter of Your Types
- Item 32: Prefer Unions of Interfaces to Interfaces of Unions
- Item 33: Prefer More Precise Alternatives to String Types
- Item 34: Prefer Incomplete Types to Inaccurate Types
- Item 35: Generate Types from APIs and Specs, Not Data
- Item 36: Name Types Using the Language of Your Problem Domain
- Item 37: Consider “Brands” for Nominal Typing
- 5. Working with any
- Item 38: Use the Narrowest Possible Scope for any Types
- Item 39: Prefer More Precise Variants of any to Plain any
- Item 40: Hide Unsafe Type Assertions in Well-Typed Functions
- Item 41: Understand Evolving any
- Item 42: Use unknown Instead of any for Values with an Unknown Type
- Item 43: Prefer Type-Safe Approaches to Monkey Patching
- Item 44: Track Your Type Coverage to Prevent Regressions in Type Safety
- 6. Types Declarations and @types
- Item 45: Put TypeScript and @types in devDependencies
- Item 46: Understand the Three Versions Involved in Type Declarations
- Item 47: Export All Types That Appear in Public APIs
- Item 48: Use TSDoc for API Comments
- Item 49: Provide a Type for this in Callbacks
- Item 50: Prefer Conditional Types to Overloaded Declarations
- Item 51: Mirror Types to Sever Dependencies
- Item 52: Be Aware of the Pitfalls of Testing Types
- 7. Writing and Running Your Code
- Item 53: Prefer ECMAScript Features to TypeScript Features
- Item 54: Know How to Iterate Over Objects
- Item 55: Understand the DOM hierarchy
- Item 56: Don’t Rely on Private to Hide Information
- Item 57: Use Source Maps to Debug TypeScript
- 8. Migrating to TypeScript
- Item 58: Write Modern JavaScript
- Item 59: Use @ts-check and JSDoc to Experiment with TypeScript
- Item 60: Use allowJs to Mix TypeScript and JavaScript
- Item 61: Convert Module by Module Up Your Dependency Graph
- Item 62: Don’t Consider Migration Complete Until You Enable noImplicitAny
- Index