Menu
Coddy logo textTech

'never' 型

CoddyのJavaScriptジャーニー「Introduction To TypeScript」セクションの一部。レッスン 70/73。

never型は、決して発生しない値を表します。最初は混乱するかもしれませんが、コード内の特定のシナリオを考えると、実は非常に論理的です。

never型は、正常に値を返さない関数に最も一般的に使用されます。

これには、常にエラーをスローする関数や、無限ループを含む関数が含まれます。

function throwError(message: string): never {
  throw new Error(message);
}

function infiniteLoop(): never {
  while (true) {
    // このループは決して終わりません
  }
}

意味のある値を返さないことを示す void とは異なり、never は関数がその終点に決して到達しないことを示します。実行は、エラーがスローされて停止するか、あるいは無期限に継続します。

challenge icon

チャレンジ

簡単

常にエラーをスローし、正常に値を返さないことで never 戻り値の型を実証する、throwError という名前の関数を作成してください。

この関数は以下の条件を満たす必要があります:

  • string 型のパラメータ message を受け取る
  • 提供されたメッセージで新しい Error をスローする
  • 明示的な戻り値の型として never を持つ

次に、以下の処理を行う handleOperation という名前の2つ目の関数を作成してください:

  • string 型の operationnumber 型の value の2つのパラメータを受け取る
  • operation が "double" の場合は value * 2 を返す
  • operation が "half" の場合は value / 2 を返す
  • それ以外の operation の場合は、メッセージ "Invalid operation: [operation]" を指定して throwError を呼び出す
  • 明示的な戻り値の型として number を持つ

以下の操作で関数をテストしてください:

  • handleOperation("double", 5) を呼び出し、結果を出力する
  • handleOperation("half", 8) を呼び出し、結果を出力する
  • handleOperation("triple", 3) を呼び出し、結果を出力する(これはエラーをスローします)

追加のテストケースを作成してください:

  • handleOperation("double", 15) を呼び出し、結果を出力する
  • handleOperation("half", 20) を呼び出し、結果を出力する

自分で試してみよう

// TODO: ここにコードを書いてください
// 戻り値の型がneverであるthrowError関数を作成します
// 戻り値の型がnumberであるhandleOperation関数を作成します

// try-catchブロックを使用して関数をテストします
try {
    console.log(handleOperation("double", 5));
} catch (error) {
    console.log(`Error: ${(error as Error).message}`);
}

try {
    console.log(handleOperation("half", 8));
} catch (error) {
    console.log(`Error: ${(error as Error).message}`);
}

try {
    console.log(handleOperation("triple", 3));
} catch (error) {
    console.log(`Error: ${(error as Error).message}`);
}

try {
    console.log(handleOperation("double", 15));
} catch (error) {
    console.log(`Error: ${(error as Error).message}`);
}

try {
    console.log(handleOperation("half", 20));
} catch (error) {
    console.log(`Error: ${(error as Error).message}`);
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Introduction To TypeScriptのすべてのレッスン

自分で練習してみよう: JavaScriptオンラインコンパイラ