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
Vous devez vous connecter pour publier un commentaire.
En fait, il semble maintenant être un moyen simple. Le code suivant fonctionne en caractères d'imprimerie 1.5:
Le truc, c'est d'abord mettre entre parenthèses ce que les touches que vous souhaitez récupérer à partir de l'argument objet, avec
key=value
pour toutes les valeurs par défaut. Qui suivent avec l':
et une déclaration de type.C'est un peu différent de ce que vous étiez en train de faire, parce qu'au lieu d'avoir une intacte
params
objet, vous avez plutôt déréférencé variables.Si vous voulez le rendre facultatif de passer quelque chose à la fonction, ajoutez une
?
pour toutes les touches dans le type, et d'ajouter une valeur par défaut de={}
après la déclaration de type:La machine prend en charge les paramètres par défaut maintenant:
https://www.typescriptlang.org/docs/handbook/functions.html
Aussi, l'ajout d'une valeur par défaut vous permet d'omettre la déclaration de type de, car il peut être déduit de la valeur par défaut:
Pas, la Machine ne dispose pas d'un moyen naturel de paramètre par défaut pour les propriétés d'un objet défini comme celui où l'on a un défaut et l'autre pas. Vous pouvez définir une riche structure:
Et de l'utiliser à la place de la ligne de la définition de type.
Vous ne pouvez pas faire quelque chose comme ça malheureusement:
Qu'il ne serait que de définir la valeur par défaut si
name
étaitundefined
.Objet déstructuration le paramètre de l'objet est ce que la plupart des réponses ci-dessus sont de viser et d'Tapuscrit a maintenant les méthodes en place pour le rendre beaucoup plus facile à lire et à comprendre intuitivement.
Déstructuration de base: Par la déstructuration d'un objet, vous pouvez choisir les propriétés d'un objet par le nom de la clé. Vous pouvez définir autant de propriétés que vous le souhaitez, et les valeurs par défaut sont définies par une syntaxe de base de
let {key = default} = object
.L'écriture d'une interface de type ou de classe pour le paramètre de l'objet améliore la lisibilité.
JS:
Cela peut être une belle façon de faire qui ne nécessite pas de long constructeurs