1. ホーム
  2. typescript

[解決済み] Typescript でエラーをスローする関数を宣言する方法

2023-01-04 06:53:25

質問

Javaでは、次のような関数を宣言します。

public boolean Test(boolean test) throws Exception {
  if (test == true)
    return false;
  throw new Exception();
}

そして、この関数は例外を処理せずに使うことができるんだ。

もし可能なら、Typescriptで同じことをするにはどうしたらよいでしょうか?コンパイラはtry/catchなしではこの関数を使えないと教えてくれます。

どのように解決するのですか?

TypeScriptにはそのような機能はない。エラー型を指定できるのは、関数がエラーを返すときだけで、投げることはできません(滅多にないことですし、アンチパターンになりがちです)。

唯一の関連する型は never . これは、関数が間違いなくエラーを投げる場合にのみ適用され、それ以上具体的なことは言えません。他の型と同じで、型の問題を起こさない限り型エラーは起こりません。

function Test(): never => {
  throw new Error();
}

Test(); // won't cause type error
let test: boolean = Test(); // will cause type error

関数が値を返す可能性がある場合。 never はreturn typeで吸収されます。

関数のシグネチャで指定することも可能ですが、あくまで参考程度に。

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

  throw new Error();
}

これは、unhandled error が起こりうるというヒントを開発者に与えることができますが (関数本体からそれがわからない場合)、 型チェックには影響しませんし、強制することもできません。 try..catch この関数の型は (test: boolean) => boolean とみなされます。