Что должно выдавать вывод new Error() в TypeScript?

#javascript #typescript #error-handling

#javascript #typescript #обработка ошибок

Вопрос:

У меня есть некоторый код, который выдает Error . Правильный ли этот код или я делаю что-то неправильно синтаксически? Это поведение по умолчанию throw new Error() или я делаю что-то не так? Пожалуйста, помогите мне.

 function Test1(test: boolean): boolean | never {
    if (test === true)
        return false;

    throw new Error();
}
Test1(false);
 

Это приводит к следующему выводу:

 /home/midhun/typescriptexamples/typescriptexample.js:79
    throw new Error();
    ^

Error
    at Test1 (/home/midhun/typescriptexamples/typescriptexample.js:79:11)
    at Object.<anonymous> (/home/midhun/typescriptexamples/typescriptexample.js:81:1)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47
 

Мой последний вопрос: как перехватить эту ошибку в TypeScript?

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

1. код ведет себя так, как ожидалось …. в вашем условии указано, что если оно равно true, возвращает false … когда вы его вызываете, это неверно, поэтому оно переходит к следующей строке, которая вызывает новую ошибку ()

2. @JonathanAlfaro но это приводит к сбою программы, как я могу поймать ошибку

3. Разве приведенный выше фрагмент кода не является плохим подходом

4. @JonathanAlfaro это просто сбой программы, верно?

5. попробуйте … поймать

Ответ №1:

В JavaScript (и, следовательно, в TypeScript), если вы хотите предотвратить throw сбой из-за ошибки n, вам нужно сделать catch это с помощью try..catch инструкции. Код, который может привести к ошибке, должен находиться внутри try блока, а код, который обрабатывает ошибку, должен находиться внутри catch блока:

 console.log("Starting up...")
try {
  const ret = Test1(false);
  console.log(ret);
} catch (err) {
  console.log("uh oh, I caught an error", err)
}
console.log("Moving on...");
 

Это приводит к появлению журналов типа

 /* [LOG]: "Starting up..." 
[LOG]: "uh oh, I caught an error",  Error: {} 
[LOG]: "Moving on..." */
 

Игровая площадка ссылка на код