Vérification de type d'interface dans TypeScript : un parcours vers la vérification d'exécution
TypeScript offre des fonctionnalités de vérification de type pour garantir l'exactitude du code. Cependant, lorsqu'il s'agit d'interfaces, vérifier si une variable implémente une interface au moment de l'exécution peut être difficile.
Considérez le code suivant :
interface A { member: string; } var a: any = { member: "foobar" }; if (a instanceof A) alert(a.member);
Ce code génère une erreur lors de la compilation, indiquant que "Le nom A n'existe pas dans le périmètre actuel." Malgré la déclaration de l'interface, TypeScript rencontre des problèmes lors de l'exécution en raison du manque de représentation de l'interface dans JavaScript.
TypeScript Custom Type Guards
Pour surmonter cette limitation, TypeScript introduit des tapez guards, vous permettant de vérifier les interfaces sans compter sur instanceof. Voici un exemple :
interface A { member: string; } function instanceOfA(object: any): object is A { return 'member' in object; } var a: any = { member: "foobar" }; if (instanceOfA(a)) { alert(a.member); }
Ce code vérifie avec succès si a implémente l'interface A à l'aide du type guard instanceOfA.
Gestion des implémentations d'interfaces complexes
Pour les scénarios où une interface comporte plusieurs membres, une approche discriminatrice peut être utile. Voici un exemple simple :
interface A { discriminator: 'I-AM-A'; member: string; } function instanceOfA(object: any): object is A { return object.discriminator === 'I-AM-A'; } var a: any = { discriminator: 'I-AM-A', member: "foobar" }; if (instanceOfA(a)) { alert(a.member); }
Dans ce cas, la propriété discriminateur agit comme un identifiant unique pour les objets implémentant l'interface A.
Conclusion
Les protections de type personnalisées de TypeScript et l'approche discriminatrice permettent aux développeurs d'effectuer des vérifications de type à l'exécution sur les interfaces, garantissant ainsi l'exactitude du code et empêchant les erreurs potentielles. erreurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!