L'assertion de type (Type Assertion) est un moyen pour le développeur d'informer le compilateur TypeScript de la façon dont il doit interpréter le type d'une valeur. La syntaxe :
let someValue: any = "exemple"; let strLen: number = (someValue as string).length;
L'assertion de type ne transforme pas les données à l'exécution, elle suggère simplement au compilateur leur type. Si l'assertion est incorrecte, le programme ne s'arrête pas, ce qui peut entraîner des erreurs d'exécution. Contrairement au « casting » en C# ou Java, TypeScript ne fait aucune transformation.
Lorsque vous utilisez cela, vous ne pouvez pas faire d'assertion entre des types non liés directement (par exemple, as number as User), mais il existe des solutions de contournement via as unknown.
Est-il sûr d'utiliser une double assertion
value as unknown as Typepour convertir une valeur en un autre type ?
Mauvaise réponse : Oui, c'est sûr, car la plupart des développeurs TypeScript le disent.
Bonne réponse : Non, c'est dangereux. Cette technique exclut les vérifications du compilateur et permet de transformer n'importe quel type en n'importe quel autre, contournant la typage, ce qui peut entraîner des erreurs à l'exécution. Utilisez-le seulement si vous êtes sûr que la valeur est réellement compatible avec le type cible.
Histoire
Un développeur a fait une assertion de type pour un objet d'une API externe comme s'il s'agissait de son propre interface (
as MyType), sans vérifier les champs. L'API a changé de structure, et l'application a commencé à planter lors de l'accès à des clés non existantes.
Histoire
Dans une bibliothèque de travail avec le DOM, quelqu'un a fait une double assertion
el as unknown as HTMLElement, sans se rassurer sur le type, et a ensuite rencontré une erreur en essayant d'appeler des méthodes d'HTMLElement sur un autre objet.
Histoire
Dans une tentative de résoudre des erreurs de type lors de l'intégration de code JS, l'un des développeurs a appliqué
as anyà la configuration. Cela a masqué le problème, et le bug de traitement incorrect des données a refait surface uniquement en production.