J'ai deux interfaces: Je veux avoir une fonction qui a un param. Lorsque le paramètre existe, je souhaite que la fonction renvoie Que dois-je faire? p> p> enfantconfig code>, sinon je souhaite retourner config code>. p>
3 Réponses :
Essayez quelque chose comme ça
function getConfig(name?: string): ChildConfig|Config {
if (name) return config[name];
return config;
};
Pour différencier d'autres réponses, donner une autre manière possible, vous pouvez définir le type de retour sur config | enfilconfig code>. const _config = getConfig('test');
if (isChildConfig(_config)) {
_config. // <-- intellisense here
}
par Les DOCS Vous pouvez utiliser les surcharges de fonction em> pour faire ce type de sécurité: function getConfig(): Config
function getConfig(name: string): ChildConfig
function getConfig(name?: string): Config | ChildConfig {
if (name) {
return config[name];
}
return config;
};
Vous pouvez définir enfantconfig | Config code> comme type de retour de mise en œuvre
@Alekseyl. Vous pourriez, mais ça n'a pas d'importance; "La picte de fonction (x): n'importe quelle pièce code> ne fait pas partie de la liste de surcharge. Il n'a donc que deux surcharges: une qui prend un objet et une qui prend un numéro" i >. C'est juste une autre chose à conserver en synchronisation car la fonction change, il est donc plus facile de la définir sur tout code>.
Je sais, mais cela compte pour la mise en œuvre elle-même (donc vous ne retour 1 code> par exemple ou n'importe quel type aléatoire)
Avez-vous lu les docs? La page Fonctions a une section sur ceci: TypeScriptLang.org/docs/handbook/functions .html # surcharge
Vous pouvez renvoyer
n'importe quel type code> ou définirenfantconfig | Config code> comme type de retour.Le type de retour
tout code> est un faux meilleur ami, car vous perdez toute la consistance de type dossier.De plus, le type syndical signifie que vous devez ensuite utiliser des assertions ou des gardes de type pour déterminer que vous avez obtenu.