0Pricing
TypeScript Academy · レッスン

ジェネリック制約:型パラメーターの絞り込み

extendsを使ってジェネリクスに形状の要件を課します。

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

ようこそ

高度なジェネリック制約を使用すると、型引数として使用できる型を絞り込み、複雑な構造に対する型安全な操作を可能にできます。

制約の復習

T extends Uは、TをUのサブタイプである型に制限します。これにより、関数内でのTの構造についてTypeScriptが把握できるようになります。
function len<T extends { length: number }>(val: T): number {
  return val.length;
}

特定のメソッドへの制約

そのメソッドを持つインターフェースに制約することで、Tが特定のメソッドを持つことを要求します。
interface Stringable { toString(): string; }
function stringify<T extends Stringable>(val: T): string {
  return val.toString();
}

制約からの推論

制約内でkeyofを使用して、安全なアクセサーを作成します。
function pluck<T, K extends keyof T>(items: T[], key: K): T[K][] {
  return items.map(item => item[key]);
}
const names = pluck(users, 'name'); // string[]

高カインド型制約(シミュレーション)

TypeScriptは真の高カインド型をサポートしていませんが、条件型と制約を使ってシミュレーションできます。

プリミティブ型への制約

特殊な関数で使用する型パラメーターを、特定のプリミティブ型に制限します。
type Primitive = string | number | boolean | bigint | symbol | null | undefined;
function isPrimitive<T extends Primitive>(val: T): true { return true; }

再帰的な制約

制約は再帰的なパターンのために、自身を参照できます。
interface Comparable<T> { compareTo(other: T): number; }
function sort<T extends Comparable<T>>(items: T[]): T[] {
  return [...items].sort((a, b) => a.compareTo(b));
}

デフォルト値付きの制約

型パラメーターには、制約とデフォルト値の両方を指定できます。デフォルト値は制約を満たしている必要があります。
function process<T extends object = Record<string, unknown>>(data: T): void {
  console.log(Object.keys(data));
}

T extends Record<string, unknown>

Record型に制約して、動的なプロパティアクセスを可能にします。
function getValue<T extends Record<string, unknown>>(obj: T, key: string): unknown {
  return obj[key];
}

戻り値の型における制約の推論

Tに制約がある場合、TypeScriptはその制約を使って、戻り値の型に対して有効な操作を判断します。
function firstKey<T extends object>(obj: T): keyof T {
  return Object.keys(obj)[0] as keyof T;
}

NoInferユーティリティ(TS 5.4)

TypeScript 5.4では、特定の引数位置から型パラメーターが推論されるのを防ぐ`NoInfer`が導入されました。
function createState<T>(initial: T, fallback: NoInfer<T>): T {
  return initial ?? fallback;
}

確認問題

`T extends { length: number }`は、ジェネリック関数内のTに何を追加しますか?

まとめ

高度な制約を使うと、ジェネリック型を特定の構造、メソッド、またはプリミティブ型のユニオンに絞り込めます。keyof、再帰的なパターン、デフォルト値を組み合わせて、強力で型安全なユーティリティを作成できます。

よくある質問

「ジェネリック制約:型パラメーターの絞り込み」レッスンは無料ですか?

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

「ジェネリック制約:型パラメーターの絞り込み」で何を学びますか?

extendsを使ってジェネリクスに形状の要件を課します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「ジェネリック制約:型パラメーターの絞り込み」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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