J'utilise TypeScript version 2.3.4. Je veux écrire une fonction qui accepte un objet qui doit avoir des champs spécifiés. Mais cet objet ne doit pas contenir d'autres champs. Comment puis-je atteindre cet objectif?TypeScript classe stricte/interface
Maintenant, cela ne fonctionne que si je définis l'objet en ligne. Mais si j'utilise un autre objet avec des champs supplémentaires - le compilateur le permettra. Ce qui est totalement faux.
Exemple:
function foo(arg: { a: string }) { // there is tons of fields actually
// ...
}
foo ({a: "qwerty"}); // No Error - ok
foo ({a: "qwerty", b: 123}); // Error - ok
let bar = {
a: "qwerty",
b: 123
};
foo (bar); // No Error - NOT OK !!!
Le même code peut être avec des interfaces, writed classes, déclarations de type - il est le même problème.
Maintenant, je dois extraire manuellement les champs de l'objet pour m'assurer qu'il n'y a pas de champs supplémentaires. Mais je ne peux pas diffuser cette solution sur ~ 1000 fonctions (j'en ai vraiment besoin) partout dans le code - c'est trop compliqué. Je crée un wrapper d'API et je dois m'assurer qu'il n'y a pas de champs supplémentaires ou faux transmis au serveur.
On dirait que c'est intentionnel. Voir [ce problème] (https://github.com/Microsoft/TypeScript/issues/13444) et [this] (https://github.com/Microsoft/TypeScript/issues/3755) pour une discussion supplémentaire. – Saravana
Saravana, oui, j'ai lu ceci, mais il n'y a pas de réponse à ma question dans ces discussions. Je pense qu'il vaudra mieux éviter la rigueur pour les interfaces, mais laissez-le pour les cours. –