Pourquoi satisfies existe
Comprendre l’écart entre annotation et inférence que satisfies comble.
Pourquoi satisfies existe est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage TypeScript Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours TypeScript Academy comprend 4 leçons au total.
Les deux objectifs en tension
Lorsque vous déclarez une config, vous recherchez généralement deux objectifs : la validation par rapport à une structure connue et une inférence précise des valeurs littérales. Ces objectifs sont souvent contradictoires.
type Color = "red" | "green" | "blue";
// We want both: check the values AND remember exactly which ones.L’annotation fait perdre la précision des littéraux
Ajouter une annotation de type valide l’objet, mais élargit les valeurs. Le compilateur oublie les littéraux exacts que vous avez écrits.
type Config = { color: string; retries: number };
const cfg: Config = { color: "red", retries: 3 };
// cfg.color is string, not "red" anymore.
console.log(cfg.color.toUpperCase());Pourquoi l’élargissement pose problème
Si color est élargi en string, vous perdez la possibilité de l’utiliser aux endroits qui exigent le littéral précis, par exemple pour indexer un autre type.
const cfg = { color: "red" } as { color: string };
// const exact: "red" = cfg.color; // Error: string not assignable to "red"
console.log(cfg.color);Sans annotation, la validation disparaît
Supprimer l’annotation conserve une inférence précise, mais retire le filet de sécurité. Les fautes de frappe et les structures incorrectes passent inaperçues.
const cfg = { color: "rad", retries: 3 };
// No error on the typo "rad" because nothing validates it.
console.log(cfg.color);L’écart de validation
Sans vérification, une valeur incorrecte, comme une couleur mal orthographiée, circule silencieusement dans votre programme et peut provoquer une erreur loin de l’endroit où la faute a été commise.
const palette = { primary: "blu" }; // typo, no error
console.log(palette.primary); // "blu"Découvrez l’opérateur satisfies
L’opérateur satisfies valide une expression par rapport à un type tout en préservant le type inféré précis. Vous obtenez ainsi le meilleur des deux mondes.
type Config = { color: string; retries: number };
const cfg = { color: "red", retries: 3 } satisfies Config;
console.log(cfg.color); // type is "red", value validatedsatisfies conserve les littéraux
Après satisfies, cfg.color est toujours le littéral "red", et non le type large string. L’inférence est préservée.
type Config = { color: string };
const cfg = { color: "red" } satisfies Config;
const exact: "red" = cfg.color; // OK
console.log(exact);satisfies valide toujours
Si l’objet ne correspond pas au type, satisfies signale une erreur, exactement comme le ferait une annotation.
type Config = { retries: number };
// const bad = { retries: "three" } satisfies Config; // Error
const good = { retries: 3 } satisfies Config;
console.log(good.retries);L’exemple à l’origine du besoin
Considérez une table de routes dont les clés doivent être des routes connues et dont les valeurs sont des noms de gestionnaires. Nous voulons l’autocomplétion des clés AND la validation des valeurs, ce que satisfies fournit.
type Routes = Record<string, { method: "GET" | "POST" }>;
const routes = {
home: { method: "GET" },
submit: { method: "POST" }
} satisfies Routes;
console.log(routes.home.method); // "GET" literalComparaison des trois approches
Annotation : valide et élargit. Sans annotation : précise, mais non validée. satisfies : valide et reste précise. Pour les configurations, la troisième approche l’emporte.
type C = { color: string };
const a: C = { color: "red" }; // widened
const b = { color: "red" }; // unvalidated
const c = { color: "red" } satisfies C; // validated + precise
console.log(a.color, b.color, c.color);Quand utiliser satisfies
Utilisez satisfies chaque fois que vous définissez une valeur constante qui doit respecter un type, tout en souhaitant réutiliser son contenu exact par la suite.
type Sizes = Record<string, number>;
const sizes = { sm: 8, md: 16, lg: 24 } satisfies Sizes;
// keys "sm" | "md" | "lg" stay known for autocomplete
console.log(sizes.md);Vérification rapide : pourquoi satisfies
Vérifiez votre compréhension de la raison d’être de satisfies.
Récapitulatif : pourquoi satisfies existe
Vous avez appris que les annotations valident, mais élargissent les types, que l’absence d’annotation préserve la précision sans valider, et que satisfies fournit à la fois la validation et une inférence précise, ce qui est idéal pour les objets de configuration.
type C = { color: string };
const c = { color: "blue" } satisfies C;
const exact: "blue" = c.color;
console.log(exact);Questions Fréquemment Posées
La leçon « Pourquoi satisfies existe » est-elle gratuite ?
Oui — le texte complet de « Pourquoi satisfies existe » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours TypeScript Academy, passe à CoddyKit PRO. Le cours TypeScript Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Pourquoi satisfies existe » ?
Comprendre l’écart entre annotation et inférence que satisfies comble. Tu pratiques TypeScript Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer TypeScript Academy ?
Aucune expérience préalable n'est requise. TypeScript Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Pourquoi satisfies existe » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon TypeScript Academy ?
Oui. Chaque leçon TypeScript Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Pourquoi satisfies existe
- satisfies ou annotation de type
- satisfies ou assertion as
- Modèles pratiques avec satisfies