ComparaisonComparaisons

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.

Sur cette page

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

#
TypeScript
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())
Résultat
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

#
Syntaxe
const a = expression as Type
const b = expression satisfies Type

Plus d’exemples

#
as laisse passer une faute de frappe dans le nom d’un champ
TypeScript
type Config = { fontSize: number }

const wrong = { fontsize: 16 } as Config
console.log(wrong.fontSize)
Résultat
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.

satisfies signale la même faute de frappe immédiatement
TypeScript
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 as comme 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 T est un signal que quelque chose ne va pas avec les types. satisfies n’exige jamais un tel contournement.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.