Как написать функцию, которая должна как возвращать значение при вызове, так и иметь метод, который можно вызвать через dot-нотацию

Задача - написать функцию baseExpect которая будет сравнивать эквивалентность двух чисел. Но должна быть описана через dot-нотацию.

Тесты для этой задачи выглядят так:

  base-expect
    should exist
      baseExpect should exist
      baseExpect should be function
      baseExpect().toBe.not should exist
      baseExpect().toBe.not should be function
    should work correct
      baseExpect(4).toBe(4) === true
      baseExpect(4).toBe(5) === false
      baseExpect(4).toBe.not(5) === true
      baseExpect(4).toBe.not(4) === false

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


Ответы (1 шт):

Автор решения: Ytar99

Решение оказалось таким:

function baseExpect(num) {
  if (!typeof num === 'number') {
    throw new Error('Wrong type of arguments');
  }

  const toBe = (equal) => num === equal;
  toBe.not = (notEqual) => num !== notEqual;

  return { toBe };
}

Все тесты проходят успешно.

→ Ссылка