Как я могу выбросить ошибку типа в Typescript - PullRequest
0 голосов
/ 29 апреля 2020

Я застрял со следующей проблемой Typescript:

Напишите функцию, которая решает, вошел ли пользователь в систему. Иногда она вызывается с числом раз, когда пользователь вошел в систему. В других случаях он вызывается с истиной. Он никогда не вызывается с ложным

Мой код пока:

function isLoggedIn(param: number | boolean ) {
  if (param === 0) {
    return false
  } else if (param === false) {   
    return false
  } else {
    return true
  }
}

Я не могу понять, как обрабатывать случай, когда функция вызывается с false, чтобы можно было вернуть ошибку типа. Если я сделаю: if (param === false) {return false}, я получу обратно ошибку

Ожидается: ошибка типа, но получено: false

Если я сгенерирую ошибку TypeError сам, то есть if (arg === false) throw new TypeError('type error') Я получаю сообщение об ошибке " Ожидается: ошибка типа, но получено: Ошибка типа: 'ошибка типа'

Кто-нибудь знает, как заставить функцию работать?

1 Ответ

0 голосов
/ 29 апреля 2020

Полагаю, что Type error, упомянутый в вопросе, не является JS TypeError, а является ошибкой типа TypeScript во время компиляции, поэтому что-то вроде:

Аргумент типа ' false 'не присваивается параметру типа' number | true '. (2345)

Вы можете изменить свое объявление на:

function isLoggedIn(param: number | true) {
  if (param === 0) {
    return false
  } else {
    return true
  }
}

См. number | true. Здесь true предназначено для представления буквального «истинного» значения, а не просто логического значения, так что вы можете передать «истинное», но не «ложное».

Вам следует адаптировать if условие внутри тоже, так как param никогда не будет false, как показано в примере. Таким образом, вы можете использовать его как:

isLoggedIn(10); // ok
isLoggedIn(true); // ok
isLoggedIn(false); // TS Error

Вы можете проверить это здесь: Playground Link

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...