Обязательные параметры

Если в качестве дефолтного параметра указать функцию, бросающую ошибку, то явное указание данного параметра станет обязательным, иначе произойдет выброс ошибки.

const throwIfMissing = p => { throw new Error(`Missing parameter: ${p}`) }
const foo = (mustBeProvided = throwIfMissing`mustBeProvided`) => {}
foo() // ==> Error: Missing parameter: mustBeProvided

Пример использования данного подхода:

const x = require('throw-if-missing')

const login = ({ username = x`username`, password = x`password` } = {}) => {}
login({ username: 'C-3PO' }) // ==> Error: Missing password

P.S.

Вы могли заметить, в примере выше такой код:

x`username`

Это Tagged templates. Вместо этого, можно было бы написать:

x('username')

Но автор использовал Tagged templates, чтобы сэкономить 2 символа и сделать код более лаконичным.

Редактировать на GitHub