0Pricing
TypeScript Academy · レッスン

ユーザー定義型ガード関数

is述語を記述して独自の型ガードを作成します。

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

はじめに

ユーザー定義の型ガードを使うと、`is` 述語の戻り値の型による絞り込みチェックを再利用可能な関数にまとめられます。

is 述語の戻り値の型

型ガード関数は `paramName is Type` を返します。関数が true を返すと、TypeScript はパラメーターをその型に絞り込みます。
function isString(val: unknown): val is string {
  return typeof val === 'string';
}

型ガードの使用

if 条件で型ガードを呼び出します。TypeScript はブロック内で型を絞り込みます。
function process(val: unknown) {
  if (isString(val)) {
    console.log(val.toUpperCase()); // val: string
  }
}

インターフェースの型ガード

インターフェースでは instanceof を使えないため、型ガードがインターフェースのユニオンを絞り込む主な方法になります。
interface Cat { meow(): void }
interface Dog { bark(): void }
function isCat(pet: Cat | Dog): pet is Cat {
  return 'meow' in pet;
}

複雑なオブジェクトの型ガード

特定の型として使用する前に、実行時にオブジェクトの形状を検証する型ガードを作成します。
interface User { name: string; age: number; }
function isUser(val: unknown): val is User {
  return (
    typeof val === 'object' &&
    val !== null &&
    typeof (val as any).name === 'string' &&
    typeof (val as any).age === 'number'
  );
}

型ガードと型アサーションの比較

型ガードは実行時にチェックします。型アサーション(as Type)はコンパイル時だけのもので、誤った型を指定できてしまいます。外部データには型ガードを優先してください。

型ガードとしての Array.isArray

Array.isArray は組み込みの型ガードです。TypeScript はこれを理解し、それに応じて型を絞り込みます。
function flatten(val: string | string[]): string[] {
  return Array.isArray(val) ? val : [val];
}

ジェネリック型ガード

型ガードをジェネリックにして、再利用可能な実行時チェック関数を作成できます。
function isNonNull<T>(val: T | null | undefined): val is T {
  return val !== null && val !== undefined;
}
const values = [1, null, 2, undefined].filter(isNonNull);
// values: number[]

アサーション関数

アサーション関数(asserts を使用)は、条件が false の場合に例外をスローし、呼び出し後に型を絞り込みます。
function assertIsString(val: unknown): asserts val is string {
  if (typeof val !== 'string') throw new TypeError('Not a string');
}
assertIsString(input);
console.log(input.toUpperCase()); // narrowed to string

型ガードの責任

TypeScript は型ガードの戻り値を完全に信頼します。型ガードが誤っていても、TypeScript はコンパイル時に不一致を検出しません。

filter と find での型ガード

型ガードを配列の filter に直接渡すと、結果の型を絞り込めます。
const mixed: (string | null)[] = ['a', null, 'b'];
const strings = mixed.filter((x): x is string => x !== null);
// strings: string[]

確認問題

関数を TypeScript の型ガードとして示す戻り値の型注釈は何ですか。

まとめ

ユーザー定義の型ガードでは、`param is Type` という戻り値の型を使って絞り込みのロジックをまとめます。filter/find と組み合わせられ、インターフェースの絞り込みにも使用でき、ジェネリックにもできます。アサーション関数は boolean を返さずに型を絞り込みます。

よくある質問

「ユーザー定義型ガード関数」レッスンは無料ですか?

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

「ユーザー定義型ガード関数」で何を学びますか?

is述語を記述して独自の型ガードを作成します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「ユーザー定義型ガード関数」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. typeofと真偽値によるナローイング
  2. instanceofとinによるナローイング
  3. ユーザー定義型ガード関数
  4. neverによる網羅性チェック
← TypeScript Academyに戻る