0Pricing
TypeScript Academy · レッスン

Contextual Typing:コンテキストからの推論

TypeScriptが周囲のコンテキストから型を推論する仕組みを理解します。

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

コンテキスト型付けとは

コンテキスト型付けとは、式そのものの値ではなく、その式が現れる位置の情報に基づいてTypeScriptが型を推論する仕組みです。

document.addEventListener("click", (e) => {
  // e is inferred as MouseEvent from the event type
  console.log(e.clientX);
});

コールバックのコンテキスト型付け

型付き関数にコールバックを渡すと、TypeScriptは期待されるコールバックのシグネチャからパラメーターの型を推論します。

const nums = [1, 2, 3];
nums.forEach((n) => {
  // n inferred as number from Array<number>
  console.log(n.toFixed(2));
});

オブジェクトリテラルのコンテキスト型付け

オブジェクトリテラルを型付き変数に代入すると、そのプロパティの型が対象の型から推論され、正確なチェックが可能になります。

interface Config { timeout: number; retries: number; }
const config: Config = {
  timeout: 3000,
  retries: 3,
  // extra: true // Error: excess property
};

JSXのコンテキスト型付け

Reactでは、イベントハンドラーのpropsにコンテキスト型が適用されるため、イベントパラメーターの型が自動的に推論されます。

function Button({ onClick }: { onClick: (e: React.MouseEvent) => void }) {
  return <button onClick={onClick}>Click</button>;
}
// Caller: e is inferred as React.MouseEvent
<Button onClick={(e) => console.log(e.currentTarget)} />

コンテキスト型付けと明示的な注釈

コンテキスト型付けは強力ですが、明示的な注釈で上書きできます。両方が存在する場合は、明示的な注釈が優先されます。

const handler: (x: string) => void = (x: number) => {}; // Error
// Explicit annotation (number) conflicts with contextual (string)

分割代入のコンテキスト型付け

コンテキスト型が適用される関数の分割代入パラメーターも、コンテキストから型を引き継ぎます。

const pairs: [string, number][] = [["a", 1]];
pairs.forEach(([key, value]) => {
  // key: string, value: number — contextually typed
  console.log(key.toUpperCase(), value * 2);
});

戻り値の型とコンテキスト型付け

関数を型付き変数に代入すると、戻り値の型もコンテキストから推論されます。

type Transform = (x: number) => string;
const double: Transform = (x) => x * 2; // Error: number not string
const str: Transform = (x) => String(x * 2); // OK

条件式のコンテキスト型付け

TypeScriptは、三項演算子や論理演算子の式にもコンテキスト型を伝播できます。

const result: string | null =
  Math.random() > 0.5 ? "yes" : null; // both arms typed by context

コンテキスト型付けの制限

注釈のない単独の変数など、式がコンテキストのない位置にある場合、コンテキスト型付けは適用されません。

const fn = (x) => x + 1; // x: any — no context to infer from
// Add annotation: const fn = (x: number) => x + 1;

双方向推論

TypeScriptは双方向の型推論を行います。上から下へ(コンテキストから)と下から上へ(式から)の両方を推論し、最も正確な型を得るために組み合わせます。

function apply<T>(fn: (x: T) => T, val: T): T { return fn(val); }
apply((x) => x.toUpperCase(), "hello"); // x inferred as string

まとめ:コンテキスト型付け

コンテキスト型付けを使うと、TypeScriptは式が使われる位置から型を推論できます。コールバック、代入、JSXのprops、分割代入などでこの推論の仕組みが役立ちます。

クイックチェック

コールバックのパラメーターにコンテキスト型付けが適用されるのはいつですか。

学んだこと

コンテキスト型付けとは、値ではなく位置からTypeScriptが型を推論する仕組みです。コールバック、イベントハンドラー、型付きの代入を簡潔にしながら、型安全性を保てます。

よくある質問

「Contextual Typing:コンテキストからの推論」レッスンは無料ですか?

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

「Contextual Typing:コンテキストからの推論」で何を学びますか?

TypeScriptが周囲のコンテキストから型を推論する仕組みを理解します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Contextual Typing:コンテキストからの推論」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 型のWideningとNarrowingの仕組み
  2. Contextual Typing:コンテキストからの推論
  3. Freshnessと余分なプロパティチェック
  4. constアサーションとas const
← TypeScript Academyに戻る