и void?
Есть функция,
generateError(message: string): void {
console.log(message)
}
generateError(message: string): never{
throw new Error(message)
}
И в верхнем случае функция никогда ничего не вернет, и в нижнем. Может я не понимаю смысл "никогда не вернет"?
В первом случае неявно, но вернёт undefined. Это легко проверить. Вторая действительно ничего не вернёт, потому что не выполнится до конца
Void это функция, которая ничего не возвращает. Хотя, чисто технически, возвращает undefined, как было сказано выше Never это функция, которая никогда не закончится. Например, если внутри себя она может выкинуть ошибку или остановить приложения в принципе. Так, если ты вызовешь такую функцию и возвращаемый тип будет 100% never, то весь код после неё Тайпскрипт (или ваш редактор/IDE) будет позначать как недоступный, т.е. он никогда не выполнится
Ещё, если функция возвращает, например, string | never, то можно сделать так const result = maybeNeverFunc() // string | never if (result) { // result: string } // result: never, весь код что будет ниже - недоступен
void как тип возврата функции подразумевает, что функция может возвращать что угодно, но возврат будет проигнорирован. Особенно полезно при типизации коллбэков never подразумевает, что код, где есть это значение никогда не будет выполнятся. Полезно при типизации функций, которые могут выбрасывать ошибки и при проверке полноты. Это всё в хандбуке хорошо описано. В первом примере функция вернет undefined, во втором ничего не вернет, т.к. код после исключения не будет выполнятся.
Спасибо большое!
Ещё вроде never и void в некоторых кейса при выводе типов через infer могут помогать, но это уже что-то на грани темной магии.
хм, окей
Обсуждают сегодня