Comment puis-je vérifier (à l'exécution) si un objet inconnu est un certain type? Et puis le convertir formellement à ce type et faire quelque chose avec?Vérifiez si un objet est un type dans Google Closure et le convertir?
Je voudrais faire quelque chose comme ceci:
const /** {Object} */ someObject = {name: 'Apple', color: 'Red'};
if (someObject is Fruit) {
// Convert to {Fruit} and do something with it.
return /** {Fruit} */ (someObject);
}
où Fruit
est une classe avec le nom des attributs et la couleur. Pour être plus précis, je ne peux pas simplement créer un objet Fruit
avec un constructeur car je reçois l'objet de JSON.parse
.
Jusqu'à présent, j'ai essayé:
if (someObject instanceof Fruit)
cette résolu à false. Et je l'ai essayé:
const aFruit = /** @type {Fruit} */ someObj;
Mais cela ne semble pas vraiment faire quoi que ce soit .. à-dire, quand je passe someObj
qui ne possède pas de propriétés nom ou la couleur, il est toujours traité comme un Fruit
. Peut-être que j'ai besoin d'une solution plus complexe/personnalisée? c'est-à-dire, est-ce intégré dans la fermeture ou devrais-je juste vérifier les attributs de mon propre chef?
types de fermeture existent seulement au moment de la compilation. – SLaks
Avec quelques explications supplémentaires sur la façon dont le type de conversion '/ ** @type {Fruit} * /' fonctionne/pourquoi cela ne fonctionne pas ici, j'accepterais "vous ne pouvez pas faire ceci par vous-même" comme réponse . – hubatish
Le test 'instanceof' ne fonctionne que lorsque l'objet est créé avec' new' (ou peut-être lorsque les valeurs JavaScript 'property' sont agencées manuellement). Avez-vous des moyens de tester quel type d'objet provient-il des propriétés? Si tel est le cas, vous pouvez utiliser la conversion de type comme vous le montrez dans votre premier exemple. – owler