as vs satisfies
as dit au compilateur de faire confiance à votre type sans rien vérifier, tandis que satisfies vérifie la conformité au type et garde le type exact déduit de la valeur.
Comparaison point par point
#Vérifie la conformité au type
- Asercja typu (as)
- Non
- satisfies
- Oui
Type de la variable résultante
- Asercja typu (as)
- Le type indiqué (
Type) - satisfies
- Le type déduit de la valeur
Faute de frappe ou champ manquant
- Asercja typu (as)
- Ne sera pas signalée
- satisfies
- Sera signalée par le compilateur
Conserve les littéraux et les clés précises
- Asercja typu (as)
- Non
- satisfies
- Oui
Sécurité
- Asercja typu (as)
- Faible, facile de tromper le compilateur
- satisfies
- Élevée, le compilateur surveille encore la forme
Usage typique
- Asercja typu (as)
- Élément du DOM, données déjà vérifiées auparavant
- satisfies
- Objets de configuration, tables de couleurs, routes
Exemple
#type Palette = Record<string, string>
const broken = { accent: '#a78bfa' } as { accent: number }
console.log(typeof broken.accent)
const safe = { accent: '#a78bfa' } satisfies Palette
console.log(safe.accent.toUpperCase())string #A78BFA
Définition et utilisation
#Les deux syntaxes associent une expression à un type, et les deux s’écrivent après la valeur : value as Type et value satisfies Type. Dans les deux cas, rien ne change dans le programme en cours d’exécution, car ce sont des mécanismes de compilation.
La différence porte sur ce que fait le compilateur. as ne vérifie rien : il remplace le type de l’expression par celui indiqué, même si la valeur ne lui correspond pas du tout, et l’erreur n’apparaît qu’à l’exécution. satisfies vérifie que la valeur correspond au type, et signale une erreur en cas de faute de frappe ou de champ manquant, mais conserve le type déduit de la valeur elle-même, pas de l’annotation. Grâce à cela, après satisfies, on voit encore les littéraux et les clés exacts de l’objet, alors qu’après as, on ne voit que le type indiqué.
Réservez as aux situations où vous savez quelque chose que le compilateur ne sait pas, par exemple un élément du DOM après querySelector. Là où vous voulez vérifier la forme d’un objet de configuration, d’une table de couleurs ou de routes, tout en gardant des types de valeurs précis, choisissez satisfies.
Syntaxe
#const a = expression as Type
const b = expression satisfies TypePlus d’exemples
#type Config = { fontSize: number }
const wrong = { fontsize: 16 } as Config
console.log(wrong.fontSize)undefined
La faute de frappe fontsize au lieu de fontSize n’a pas été signalée, car as ne fait que réécrire le type. Dans le programme en cours d’exécution, le champ fontSize n’existe simplement pas.
type Config = { fontSize: number }
const correct = { fontsize: 16 } satisfies Config
// Erreur : Object literal may only specify known properties, and 'fontsize' does not exist in type 'Config'.Bonnes pratiques
#- Traitez
ascomme un dernier recours, surtout avec des données externes. Si possible, vérifiez la forme avec une garde de type. - Après
satisfies, la variable a le type déduit de la valeur, et non de l’annotation, donc les suggestions de l’éditeur montrent les clés et les littéraux exacts. - Une double assertion
as unknown as Test un signal que quelque chose ne va pas avec les types.satisfiesn’exige jamais un tel contournement.
Entrées associées
#Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.