Penso che tu stia abusando della funzionalità un po '.
Il punto dei parametri di default fornisce un valore che ha senso nel caso in cui le chiamate a questa funzione non abbiano un valore definito per quel parametro.
C'è una grande sovrapposizione tra non passare un valore definito e dimenticare un parametro obbligatorio, ma c'è una differenza: puoi passare undefined
.
Il tuo codice verrà lanciato se la funzione viene chiamata con undefined
:
const mandatory = (name) => {
throw new Error('The ${name} parameter is mandatory');
};
const foo = (bar = mandatory('bar')) => {
// some code
};
foo(undefined); // Error: The bar parameter is mandatory
In questo caso lamentarsi del fatto che il parametro sia obbligatorio è fuorviante, perché un parametro è stato effettivamente superato.
undefined
potrebbe non essere un valore consentito, ma in questo caso dovresti controllare il valore e lamentarti del suo tipo.
Se vuoi solo controllare se un argomento è stato passato o meno, usare una funzione normale e controllare arguments.length
può essere un'idea migliore.
Vedi ad esempio il comportamento di DOMParser#parseFromString
, che a mio parere è più utile:
var p = new DOMParser();
p.parseFromString(); // TypeError: Not enough arguments
p.parseFromString(undefined); // TypeError: Not enough arguments
p.parseFromString(undefined, undefined); // TypeError: Argument 2 'undefined' is not a valid value