TypeScript Academy · レッスン

void、never、関数シグネチャ

戻り値がない場合のvoidと、到達不能なコードを示すneverを理解します。

レッスン 4/413 ステップ

「void、never、関数シグネチャ」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。

ようこそ

2つの特別な戻り値の型であるvoidとneverは、有用な値を生成しない関数と、通常の形では決して完了しない関数を表します。

void:意味のある値を返さない

voidは、関数が副作用を実行するものの値を返さない場合に使います。undefinedを返すことは許容しますが、戻り値を使うべきではないことを示します。
function logError(msg: string): void {
  console.error(msg);
  // implicit return undefined
}

voidとundefinedの違い

voidとundefinedは似ていますが異なるものです。void型の関数はundefinedを返せます。しかしvoidは、呼び出し元が戻り値を無視すべきことを示します。
const fn: () => void = () => 42; // Allowed! Caller ignores return
const fn2: () => undefined = () => 42; // Error

コールバックでのvoid

コールバックパラメーターに型を付けるとき、voidは呼び出し元が戻り値を使わないことを示します。これにより、コールバックは任意の型を返せます。
function run(cb: () => void): void { cb(); }
run(() => 'hello'); // OK — return value ignored

never:到達不能な型

neverは、決して発生しない値を表します。neverを返す関数は、例外をスローするか無限ループします。
function fail(msg: string): never {
  throw new Error(msg);
}
function loop(): never {
  while (true) {}
}

網羅性チェックでのnever

neverはswitch文で使われ、ユニオンのすべてのケースが処理されていることを確認します。neverへの割り当てによって、ケースが抜けている場合にエラーが発生します。
type Shape = 'circle' | 'square';
function area(s: Shape): number {
  switch (s) {
    case 'circle': return 3.14;
    case 'square': return 1;
    default:
      const _: never = s; // Error if a new shape is added
      return 0;
  }
}

neverはすべての型のサブタイプ

neverはすべての型に割り当てられます(決して発生しないため、どの型の条件も自明に満たします)。他の型をneverに割り当てることはできません。

関数型のシグネチャ

関数型は`(param: Type) => ReturnType`の形式で記述します。これにより、関数を第一級の値として表せます。
type Handler = (event: MouseEvent) => void;
type Transform = (input: string) => string;

インターフェースの呼び出しシグネチャ

インターフェースでは、呼び出しシグネチャ構文を使って呼び出し可能な型を定義できます。
interface Formatter {
  (value: string): string;
  locale: string;
}

コンストラクトシグネチャ

インターフェースでは、コンストラクトシグネチャでnewキーワードを使い、インスタンス化可能な型も定義できます。
interface Constructor {
  new (name: string): Animal;
}

エラーハンドリングでvoidとneverを組み合わせる

常に例外をスローする関数にはneverを使います。エラーを握りつぶして何も返さない関数にはvoidを使います。この違いは制御フロー解析で重要です。
function orThrow(val: string | null): string {
  if (val === null) fail('null!'); // never
  return val; // TypeScript knows this is reachable
}

クイックチェック

関数が常にエラーをスローし、通常の形では決して戻らないことを示す戻り値の型はどれですか?

まとめ

意味のある値を返さず副作用を実行する関数にはvoidを使います。例外をスローしたりループしたりする関数にはneverを使います。neverによって網羅性チェックが可能になり、すべての型のサブタイプとして扱われます。
無料で開始

AI チューターと学ぶ TypeScript — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
101
レッスン
352

よくある質問

「void、never、関数シグネチャ」レッスンは無料ですか?

はい。「void、never、関数シグネチャ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。

「void、never、関数シグネチャ」で何を学びますか?

戻り値がない場合のvoidと、到達不能なコードを示すneverを理解します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「void、never、関数シグネチャ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. パラメーターと戻り値の型注釈
  2. オプションパラメーターとデフォルトパラメーター
  3. Restパラメーターと型付きSpread
  4. void、never、関数シグネチャ
← TypeScript Academyに戻る