TypeScript vs Flow
Type systems.
Overview
TypeScript won the JavaScript-types market several years ago; Flow remains in long-tail Meta-internal codebases and a small number of legacy repos that have not migrated. For new code in 2026, the conversation is whether to type at all, not which type checker to pick.
- TypeScript. Microsoft-backed, vast ecosystem of typed libraries via DefinitelyTyped, deep editor support, structural typing with control-flow analysis.
- Flow. Meta-built, originally tighter inference for React, now narrow third-party support and a smaller community than TypeScript.
- Operational fit. TypeScript wins essentially every greenfield decision; Flow only persists where migration cost has not yet been paid.
- Per-codebase decision and migration trigger. The question is not "Flow or TS" but "do we migrate this Flow codebase to TS this quarter or next."
The approach
For new code, default to TypeScript. For Flow codebases, plan a migration with a measurable end date; running both indefinitely costs more than picking one.
- TypeScript-by-default. Every new package starts in strict mode TypeScript; the cost of not doing this compounds with every untyped import.
- Migration plan for Flow code. Use codemods (flow-to-ts) to do the bulk, then refactor types that did not survive translation.
- Team fluency check. If the team has more Flow than TS experience, schedule a focused upskill week; do not let it block the migration.
- Document the choice and the migration deadline. "Eventually" is not a plan; pick a quarter and write it down.
Why this compounds
Standardising on one type system keeps paying back: shared lint rules, one editor configuration, shared type-utility libraries, and a single answer when a new engineer asks how to add a typed module.
- Operational consolidation. One type checker, one set of editor extensions, one CI step instead of two.
- Engineering velocity. Mature TypeScript types in node_modules remove the need to write type stubs for every dependency.
- Faster onboarding. New hires almost certainly know TypeScript already; Flow ramp time is dead weight.
- Decision trail for the next codebase. Each documented choice teaches the next team which questions to ask, not which checker to default to.