0Pricing
TypeScript Academy · レッスン

条件型のinferを理解する

extends節でinferを使って内部の型を取り出します。

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

infer とは

inferキーワードは条件型の内部で使用し、マッチした位置から型変数を取り出せます。取り出した型変数は、条件が真の場合の分岐で使用できます。

type GetReturn<T> = T extends (...args: any[]) => infer R ? R : never;

infer の基本例

ここでは、infer Rを使って任意の関数の戻り値の型を取り出します。

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type A = ReturnType<() => string>;  // string
type B = ReturnType<() => number[]>; // number[]

infer の仕組み

TypeScript はTの構造をパターンと照合します。一致した場合、推論された変数には一致した部分が格納されます。一致しない場合は、偽の場合の分岐が選択されます。

type First<T> = T extends [infer F, ...any[]] ? F : never;
type X = First<[string, number, boolean]>; // string

ジェネリック型引数からの推論

ジェネリック型の型引数を推論できます。たとえば、PromiseからTを取り出せます。

type Unwrap<T> = T extends Promise<infer U> ? U : T;
type A = Unwrap<Promise<string>>; // string
type B = Unwrap<number>;          // number

複数の infer 変数

1つの条件型で複数のinfer節を使用し、複数の位置を同時に取り出せます。

type Head<T> = T extends [infer H, ...infer Tail] ? H : never;
type Tail<T> = T extends [infer H, ...infer Tail] ? Tail : never;

関数の引数における infer

infer は戻り値の型だけでなく、関数の引数の型も取り出せます。

type FirstParam<T> = T extends (first: infer P, ...rest: any[]) => any ? P : never;
type A = FirstParam<(x: string, y: number) => void>; // string

infer による分配動作

Tが共用体の場合、inferを含む条件型は共用体の各メンバーに対して分配されます。

type UnwrapAll<T> = T extends Promise<infer U> ? U : T;
type X = UnwrapAll<Promise<string> | Promise<number>>;
// string | number

ネストした infer

infer をネストすると、型構造のより深い部分に到達できます。たとえば、promise 内の配列の要素型を取り出せます。

type UnwrapPromiseArray<T> =
  T extends Promise<infer U>
    ? U extends (infer V)[]
      ? V
      : U
    : T;

文字列パターンでの infer

テンプレートリテラル型と infer を組み合わせると、文字列リテラル型から部分文字列を取り出せます。

type GetDomain<T extends string> =
  T extends `https://${infer Domain}` ? Domain : never;
type D = GetDomain<"https://example.com">; // "example.com"

よくある落とし穴

infer は条件型の extends 節の内部でのみ使用できます。それ以外の場所で使うとコンパイルエラーになります。また、偽の場合の分岐では infer を利用できません。

// Error: infer can only appear in extends clauses
type Bad<T> = infer R; // SyntaxError

復習: infer

inferキーワードを使うと、条件型で構造を照合した結果から型の一部を取り出せます。ReturnType、Parameters、Awaitedなどのユーティリティ型を支える機能です。

確認問題

inferキーワードはどこで使用できますか。

学んだこと

inferキーワードを使うと、構造パターンから型の一部を取り出すことで、型レベルのパターンマッチングを実現できます。TypeScript における強力なユーティリティ型と型安全なメタプログラミングの基盤です。

よくある質問

「条件型のinferを理解する」レッスンは無料ですか?

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

「条件型のinferを理解する」で何を学びますか?

extends節でinferを使って内部の型を取り出します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「条件型のinferを理解する」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 条件型のinferを理解する
  2. ReturnTypeとParametersをゼロから構築する
  3. 深くネストした推論パターン
  4. inferの実践的な用途:Promiseのアンラップ
← TypeScript Academyに戻る