On peut combiner les modificateurs readonly et ? (ainsi que leurs variantes +/-) pour créer toutes sortes de transformations sur les propriétés.
TS en fournit plusieurs natif, mais comprendre comment les écrire aide à en créer des personnalisés pour vos besoins spécifiques. 🛠️
Utilitaire Required<T> et Readonly<T> ⭐⭐⭐☆☆
Après Partial qui rend tout optionnel, connaissez-vous Required<T> et Readonly<T> ? Le premier rend tout obligatoire, le second tout en lecture seule. 🔒
Comment les implémenteriez-vous, par analogie avec le défi précédent ? 🤔
Dans AllNeeded, même done devient obligatoire (plus de ?).
Dans AllInRead, on ne pourra pas faire todo.title = "New" si todo est de type AllInRead. 🔐
Ces exemples montrent la souplesse des mapped types.
On peut les combiner avec d’autres fonctionnalités : par exemple utiliser des readonly pour ajouter le caractère de lecture seule.
Dans les prochains défis, on explorera d’autres utilitaires construits de la même manière (Required, Readonly, etc.). 🚀
Créer un type Optional<T> ⭐⭐⭐☆☆
TypeScript fournit un type utilitaire Partial<T> qui rend toutes les propriétés de T optionnelles.
Sans l’utiliser, pouvez-vous créer un équivalent nommé Optional<T> ? 🤔
Ce qui correspond bien à { nom?: string; age?: number }.
Mission accomplie ✅ ! C’est exactement ce que fait Partial<T> en standard.
Les mapped types sont un mécanisme très puissant en TypeScript pour transformer un type existant en un nouveau type modifié.
8️⃣ Conclusion 👻
Les champs fantômes, c’est :
🧠 Une technique avancée
💡 Simple à implémenter
🛡️ Géniale pour la robustesse
🔥 À connaître si tu veux aller plus loin avec TypeScript
🧵 Les champs fantômes en TypeScript 👻
Ou comment ajouter des contraintes sans rien stocker 🧙♂️
Un concept subtil, peu connu, mais ultra puissant. A découvrir ci-dessous👇
7️⃣ Le vrai pouvoir des types
Les champs fantômes montrent à quel point TypeScript peut être expressif même sans runtime.
C’est comme des balises invisibles pour le compilateur, qui rendent ton code plus sûr, plus robuste.
Tu n’as pas besoin de classes pour structurer ton code.