Как избежать проверки, является ли значение неопределенным, когда функция возвращает ошибку и значение в typescript?

#typescript

#typescript

Вопрос:

Учитывая функцию, которая возвращает полезное значение и значение ошибки, когда что-то идет не так, я пытаюсь избежать проверки, является ли полезное значение undefined при отсутствии ошибки,

 const someFunc = (): {error?: Error, value?: string} => { /* ... */ }
  

После вызова вышеупомянутой функции мы можем проверить, есть ли ошибка. Однако, даже если ошибки нет, мы все равно должны проверить value , определено ли значение.

 const { error, value } = someFunc();

if (error) {
  /* handle error */
  // return something
  // throw something
}

// This is necessary b/c `value` could be undefined. 
// Yet it is "impossible" for value to be undefined if code execution reaches this point
if (!value) {
  throw Error('Expected `value` to be defind');
}

// only now can `value` be used without it being *|undefined
console.log(value.toUpperCase);
  

Существует ли лучший тип или шаблон обработки ошибок, который позволил бы обрабатывать ошибки аналогичным образом, избегая при этом необходимости проверки на value определение?

Комментарии:

1. Вот хороший чистый шаблон, который может вам помочь github.com/David-Else /…

Ответ №1:

Почему бы не выдавать ошибки в функции. Первый вместо возврата error?: Error , а второй в случае value === undefined . В итоге вы получите: const sumFunc = (): string => {...} . Функция, которую вы могли бы обернуть в try-catch.

Комментарии:

1. Существует много допустимых сценариев, в которых метод не должен принимать решение о выдаче или возврате ошибки. Решение может потребоваться принять путем вызова методов. Если вы читаете комментарии, там написано «вернуть что-то / выбросить что-то».