Flow : l'alternative de Meta au typage JavaScript
Flow est un vérificateur de types statiques pour JavaScript créé par Meta (anciennement Facebook) en 2014. Contrairement à TypeScript qui est un sur-ensemble de JavaScript avec son propre compilateur, Flow est un outil d'analyse statique qui ajoute des annotations de type au JavaScript standard. Les annotations sont supprimées à la compilation par Babel ou flow-remove-types.
Historiquement, Flow a été le premier choix pour le typage dans l'écosystème React. React lui-même et de nombreuses bibliothèques de Meta utilisent encore Flow en interne. Cependant, TypeScript a largement surpassé Flow en adoption depuis 2018-2019, et même l'équipe React a commencé à publier des types TypeScript officiels.
Pourquoi Flow existe encore
Malgré la domination de TypeScript, Flow a des cas d'usage légitimes :
- Codebase Meta : Des millions de lignes de code Flow chez Facebook, Instagram, WhatsApp. La migration serait colossale.
- Analyse plus stricte : Flow peut détecter certaines erreurs que TypeScript laisse passer (notamment sur les objets exacts).
- Types opaques : Une fonctionnalité unique pour l'encapsulation de types (TypeScript n'a pas d'équivalent direct).
- Intégration Babel : Flow s'intègre naturellement dans les projets Babel existants.
Syntaxe Flow essentielle
📝 // @flow
Directive obligatoire en haut de chaque fichier pour activer la vérification. Sans elle, Flow ignore le fichier. Variante : // @flow strict pour un mode plus strict.
🏷️ Annotations de type
function greet(name: string): string { ... }. Syntaxe quasi-identique à TypeScript. Fonctionne sur variables, paramètres, retours, propriétés.
📦 Type aliases
type User = { name: string, age: number, ... }. Le , à la fin est une convention Flow (virgule trailing dans les objets).
🔒 Opaque types
opaque type UserId = string;. Le type sous-jacent est caché à l'extérieur du module. Empêche les confusions entre ID de même type sous-jacent.
Types utilitaires spécifiques à Flow
$ReadOnly<T>: Rend toutes les propriétés en lecture seule (commeReadonlyen TypeScript)$Shape<T>: Rend toutes les propriétés optionnelles (commePartialen TypeScript)$Exact<T>: Interdit les propriétés supplémentaires (pas d'équivalent direct en TS)$Keys<T>: Union des clés d'un type objet (commekeyofen TypeScript)$Values<T>: Union des valeurs d'un type objet$PropertyType<T, 'key'>: Type d'une propriété spécifique$ElementType<T, K>: Type des éléments d'un array ou objet indexé
Flow vs TypeScript : comparaison honnête
- Syntaxe : Très similaire (80-90% compatible). Migration possible avec des outils automatiques.
- Adoption : TypeScript domine massivement (~95% des projets typés). Flow est quasi-exclusif à Meta.
- Écosystème : DefinitelyTyped pour TS est 10x plus complet que flow-typed.
- Outillage IDE : VS Code + TypeScript est nettement supérieur à Flow pour l'autocomplétion et le refactoring.
- Strictesse : Flow peut être plus strict sur certains patterns (objets exacts, variance).
Traitement 100% local : confidentialité garantie
Cet outil utilise js-beautify pour formater votre code Flow. Tout le traitement s'effectue dans votre navigateur — aucun code n'est envoyé à nos serveurs. Vous pouvez formater du code propriétaire en toute confiance.