169 похожих чатов

Ребят всем привет, объясните пожалуйста в чем разница между never

и void?

Есть функция,

generateError(message: string): void {
console.log(message)
}

generateError(message: string): never{
throw new Error(message)
}

И в верхнем случае функция никогда ничего не вернет, и в нижнем. Может я не понимаю смысл "никогда не вернет"?

9 ответов

18 просмотров

В первом случае неявно, но вернёт undefined. Это легко проверить. Вторая действительно ничего не вернёт, потому что не выполнится до конца

Void это функция, которая ничего не возвращает. Хотя, чисто технически, возвращает undefined, как было сказано выше Never это функция, которая никогда не закончится. Например, если внутри себя она может выкинуть ошибку или остановить приложения в принципе. Так, если ты вызовешь такую функцию и возвращаемый тип будет 100% never, то весь код после неё Тайпскрипт (или ваш редактор/IDE) будет позначать как недоступный, т.е. он никогда не выполнится

Agent_RBY_
Void это функция, которая ничего не возвращает. Хо...

Ещё, если функция возвращает, например, string | never, то можно сделать так const result = maybeNeverFunc() // string | never if (result) { // result: string } // result: never, весь код что будет ниже - недоступен

void как тип возврата функции подразумевает, что функция может возвращать что угодно, но возврат будет проигнорирован. Особенно полезно при типизации коллбэков never подразумевает, что код, где есть это значение никогда не будет выполнятся. Полезно при типизации функций, которые могут выбрасывать ошибки и при проверке полноты. Это всё в хандбуке хорошо описано. В первом примере функция вернет undefined, во втором ничего не вернет, т.к. код после исключения не будет выполнятся.

Alexandr
void как тип возврата функции подразумевает, что ф...

Ещё вроде never и void в некоторых кейса при выводе типов через infer могут помогать, но это уже что-то на грани темной магии.

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Карта сайта