Effective TypeScript: 62 Specific Ways to Improve Your TypeScript

… in a nutshell

Florian Kromer
Feb 20 · 20 min read
Image for post
Image for post
Photo by Luca Martini on Unsplash

My personal approach to the topic

There is nothing to add!

Item 1: Understand the Relationship Between TypeScript and JavaScript

Image for post
Image for post
[Effective TypeScript, p. 2]
Image for post
Image for post
[Effective TypeScript, p. 5]

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

Item 6: Use Your Editor to Interrogate and Explore the Type System

Item 7: Think of Types as Sets of Values

Image for post
Image for post
[Effective TypeScript, p. 32]
Image for post
Image for post
[Effective TypeScript, p. 34]

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 Di€erences 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

Item 19: Avoid Cluttering Your Code with Inferable Types

Item 20: Use Di€erent Variables for Di€erent 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 forAsynchronous Code

Item 26: Understand How Context Is Used in TypeInference

Item 27: Use Functional Constructs and Libraries to HelpTypes Flow

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

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

Item 45: Put TypeScript and @types in devDependencies

Item 46: Understand the Three Versions Involved in TypeDeclarations

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 OverloadedDeclarations

Item 51: Mirror Types to Sever Dependencies

Item 52: Be Aware of the Pitfalls of Testing Types

Item 53: Prefer ECMAScript Features to TypeScriptFeatures

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

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 DependencyGraph

Image for post
Image for post
[Effective TyeScript, p. 230]

Item 62: Don’t Consider Migration Complete Until You Enable noImplicitAny

Reference

The Startup

Medium's largest active publication, followed by +771K people. Follow to join our community.

Florian Kromer

Written by

Software Developer for rapid prototype or high quality software with interest in distributed systems and high performance on premise server applications.

The Startup

Medium's largest active publication, followed by +771K people. Follow to join our community.

Florian Kromer

Written by

Software Developer for rapid prototype or high quality software with interest in distributed systems and high performance on premise server applications.

The Startup

Medium's largest active publication, followed by +771K people. Follow to join our community.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store