Как указывает @jcalz в комментарии, метод defaultArguments
возвращает либо function
, либо string
.
В тот момент, когда вы пишете код ...
console.assert(add2(10) === 19);
компилятор совершенно правильно отмечает ошибку, потому что в этот момент вы не знаете, какой из двух возможных типов add2
есть.
Если вы добавите дополнительную проверку типа в свой код,Компилятор будет уверен, что вы работаете со значением типа function
, и скомпилируется без ошибки.
if (typeof(add2) === 'function')) {
console.assert(add2(10) === 19);
console.assert(add2(10, 7) === 17);
console.assert(isNaN(add2()));
} else {
console.error(add2);
}