0
votes

Fonction Décidez du type de retour par param.

J'ai deux interfaces: xxx

Je veux avoir une fonction qui a un param. Lorsque le paramètre existe, je souhaite que la fonction renvoie enfantconfig , sinon je souhaite retourner config . xxx

Que dois-je faire?


4 commentaires

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 ou définir enfantconfig | Config comme type de retour.


Le type de retour tout 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.


3 Réponses :


0
votes

Essayez quelque chose comme ça

function getConfig(name?: string): ChildConfig|Config {
  if (name) return config[name];
  return config;
};


0 commentaires

0
votes

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
}


0 commentaires

1
votes

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;
};


3 commentaires

Vous pouvez définir enfantconfig | Config 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 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" . C'est juste une autre chose à conserver en synchronisation car la fonction change, il est donc plus facile de la définir sur tout .


Je sais, mais cela compte pour la mise en œuvre elle-même (donc vous ne retour 1 par exemple ou n'importe quel type aléatoire)