Paramètre valeur par défaut pour le fichier d'enregistrement de l'objet passé en argument

function sayName(params: {firstName: string; lastName?: string}) {
    params.lastName = params.lastName || 'smith';  //<<-- any better alternative to this?
    var name = params.firstName + params.lastName
    alert(name);
}

sayName({firstName: 'bob'});

J'avais imaginé quelque chose comme ça pourrait fonctionner:

function sayName(params: {firstName: string; lastName: string = 'smith'}) {

Évidemment, si ces ont été clair arguments que vous pourriez le faire avec:

function sayName(firstName: string, lastName = 'smith') {
    var name = firstName + lastName;
    alert(name);
}

sayName('bob');

Et en coffeescript, vous avez accès à la condition de l'existence de l'opérateur peut donc faire:

param.lastName ?= 'smith'

Qui est compilé en javascript:

if (param.lastName == null) {
    param.lastName = 'smith';
}
  • Votre solution proposée params.lastName = params.lastName || 'smith'; est, de fait, assez bien - il gère les cordes à vide, undefined, les chaînes et les valeurs null.
  • Et rien falsy. C'est bien dans le cas d'un nom de famille, mais généralement pas une bonne idée. C'est pourquoi la Machine se traduit par des valeurs par défaut à if(typeof x === "undefined") { … }. Non pas que vous ne le sais pas, mais simplement en indiquant le cas général pour l'OP.
  • vrai, mais en raison de lastName?: string il ne peut jamais être aussi SteveFenton dit "gère des chaînes vides, undefined, les chaînes et les valeurs null".
  • À l'intérieur de la Machine, oui. Mais c'est juste au moment de la compilation. De toute façon, comme je l'ai dit, il suffit de pointer un cas général scénario 🙂
  • D'accord avec steve ici. Assez souvent, il est préférable d'avoir une seule config argument au lieu de par exemple 10 arguments. Dans ce cas params.lastName = params.lastName || 'smith'; est le modèle que j'utilise
InformationsquelleAutor AJP | 2014-04-26