TypeScriptでエラーをスローする関数を宣言する方法:詳細解説とサンプルコード
TypeScriptでエラーをスローする関数を宣言する方法
throw キーワードを使用する
最も一般的な方法は、throw
キーワードを使用してエラーオブジェクトをスローすることです。
function myFunction(input: string): number {
if (input.length === 0) {
throw new Error("入力値が空です");
}
// 処理...
return 1;
}
try {
myFunction("");
} catch (error) {
console.log(error.message); // "入力値が空です"
}
この例では、myFunction
関数は、入力値が空の場合にError
オブジェクトをスローします。
Error オブジェクトを返す
throw
キーワードを使用する代わりに、Error
オブジェクトを関数の戻り値として返すこともできます。
function myFunction(input: string): number | Error {
if (input.length === 0) {
return new Error("入力値が空です");
}
// 処理...
return 1;
}
const result = myFunction("");
if (result instanceof Error) {
console.log(result.message); // "入力値が空です"
} else {
// 処理...
}
Result
型は、エラー処理をより安全かつ簡潔に行うための型です。
type Result<T, E> = Ok<T> | Error<E>;
interface Ok<T> {
tag: "ok";
value: T;
}
interface Error<E> {
tag: "error";
error: E;
}
function myFunction(input: string): Result<number, string> {
if (input.length === 0) {
return {
tag: "error",
error: "入力値が空です",
};
}
// 処理...
return {
tag: "ok",
value: 1,
};
}
const result = myFunction("");
if (result.tag === "error") {
console.log(result.error); // "入力値が空です"
} else {
// 処理...
}
この例では、myFunction
関数は、Result
型を使用して、成功時には数値、失敗時にはエラーメッセージを返します。
TypeScriptでエラーをスローする関数を宣言するには、いくつかの方法があります。
throw
キーワードを使用するError
オブジェクトを返すResult
型を使用する
throw キーワードを使用する
function myFunction(input: string): number {
if (input.length === 0) {
throw new Error("入力値が空です");
}
// 処理...
return 1;
}
try {
myFunction("");
} catch (error) {
console.log(error.message); // "入力値が空です"
}
Error オブジェクトを返す
function myFunction(input: string): number | Error {
if (input.length === 0) {
return new Error("入力値が空です");
}
// 処理...
return 1;
}
const result = myFunction("");
if (result instanceof Error) {
console.log(result.message); // "入力値が空です"
} else {
// 処理...
}
Result 型を使用する
type Result<T, E> = Ok<T> | Error<E>;
interface Ok<T> {
tag: "ok";
value: T;
}
interface Error<E> {
tag: "error";
error: E;
}
function myFunction(input: string): Result<number, string> {
if (input.length === 0) {
return {
tag: "error",
error: "入力値が空です",
};
}
// 処理...
return {
tag: "ok",
value: 1,
};
}
const result = myFunction("");
if (result.tag === "error") {
console.log(result.error); // "入力値が空です"
} else {
// 処理...
}
TypeScriptでエラーをスローする関数を宣言するその他の方法
assert
関数は、指定された条件が真であることを確認します。条件が偽の場合、Error
オブジェクトをスローします。
function myFunction(input: string): number {
assert(input.length > 0, "入力値が空です");
// 処理...
return 1;
}
try {
myFunction("");
} catch (error) {
console.log(error.message); // "入力値が空です"
}
never 型を使用する
never
型は、決して起こり得ないことを表す型です。never
型の関数は、常にエラーをスローします。
function myFunction(input: string): never {
throw new Error("この関数は常にエラーをスローします");
}
try {
myFunction("");
} catch (error) {
console.log(error.message); // "この関数は常にエラーをスローします"
}
カスタムエラークラスを作成する
独自のエラーメッセージやエラーコードを定義したい場合は、カスタムエラークラスを作成することができます。
class MyError extends Error {
constructor(message: string) {
super(message);
this.name = "MyError";
}
}
function myFunction(input: string): number {
if (input.length === 0) {
throw new MyError("入力値が空です");
}
// 処理...
return 1;
}
try {
myFunction("");
} catch (error) {
if (error instanceof MyError) {
console.log(error.message); // "入力値が空です"
} else {
throw error;
}
}
typescript