0Pricing
TypeScript Academy · レッスン

分配条件型

条件型がユニオンの各メンバーにどのように分配されるかを理解します。

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

ようこそ

分配条件型は、条件型をユニオンの各メンバーに個別に適用します。この強力な動作により、ユニオンの変換とフィルタリングが可能になります。

分配とは

条件型が単独のジェネリックTを持ち、Tがユニオンである場合、TypeScriptは条件を各ユニオンメンバーに個別に適用します。
type Wrap<T> = T extends any ? { value: T } : never;
type R = Wrap<string | number>;
// = { value: string } | { value: number }

重要な条件

分配は、Tが単独の(ラップされていない)ジェネリック型パラメーターである場合にのみ発生します。Tをタプルでラップすると防止できます。
type Bare<T> = T extends string ? 'yes' : 'no';
type Wrapped<T> = [T] extends [string] ? 'yes' : 'no';
type B = Bare<'a' | 'b'>; // 'yes' | 'yes' = 'yes'
type W = Wrapped<'a' | 'b'>; // 'no' — treated as a tuple

neverを使ったユニオンのフィルタリング

false側の分岐からneverを返すと、ユニオンのメンバーが除外されます。
type StringsOnly<T> = T extends string ? T : never;
type S = StringsOnly<string | number | boolean>; // string

組み込みのExtract

Extractは、Uに代入可能なメンバーを残す分配条件型として実装されています。
type Extract<T, U> = T extends U ? T : never;
type E = Extract<string | number | boolean, string | number>; // string | number

組み込みのExclude

Excludeは、Uに代入可能なユニオンメンバーを取り除きます。
type Exclude<T, U> = T extends U ? never : T;
type Ex = Exclude<string | number | boolean, boolean>; // string | number

ToArrayの分配

分配によって、各ユニオンメンバーに個別にToArrayを適用します。
type ToArray<T> = T extends any ? T[] : never;
type R = ToArray<string | number>; // string[] | number[]

分配を防止するユースケース

ユニオン全体を単一の型引数として扱い、分配したくない場合があります。
type IsUnion<T> = [T] extends [T] ? [T] extends [Exclude<T, T>] ? false : true : false;

分配されるマップ型

分配条件型とマップ型を組み合わせて、選択したプロパティを変換します。
type PickByValue<T, V> = {
  [K in keyof T as T[K] extends V ? K : never]: T[K]
};

ReturnTypeでの分配条件型

分配される動作により、Tが関数型のユニオンである場合でもReturnTypeは正しく機能します。
type Fn = (() => string) | (() => number);
type R = ReturnType<Fn>; // string | number

先行分配と遅延分配

TypeScriptは、自由な型パラメーターを持つ条件型を、解決されるまで遅延させます(評価しません)。これが遅延評価です。

確認問題

Tが単独のジェネリックではない場合、`type R = (string | number) extends string ? 'yes' : 'no'`の結果は何ですか?

まとめ

Tが単独のジェネリック型パラメーターである場合、分配条件型は各ユニオンメンバーに個別に適用されます。これにより、Extract、Exclude、カスタムのユニオンフィルタリングが実現します。分配を防ぐには、タプルでラップします。

よくある質問

「分配条件型」レッスンは無料ですか?

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

「分配条件型」で何を学びますか?

条件型がユニオンの各メンバーにどのように分配されるかを理解します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「分配条件型」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. keyofとインデックスアクセス型
  2. ジェネリック制約:型パラメーターの絞り込み
  3. 条件型:T extends U ? X : Y
  4. 分配条件型
← TypeScript Academyに戻る