satisfiesが存在する理由
satisfiesが埋める、型注釈と型推論の間にある差を理解します。
「satisfiesが存在する理由」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。
相反する2つの目標
config を宣言するときは、通常、既知の形状に対する検証と、リテラル値の正確な推論という2つを求めます。しかし、これらの目的はしばしば両立しません。
type Color = "red" | "green" | "blue";
// We want both: check the values AND remember exactly which ones.アノテーションはリテラルの絞り込みを失わせます
型アノテーションを追加するとオブジェクトは検証されますが、値の型が広がります
type Config = { color: string; retries: number };
const cfg: Config = { color: "red", retries: 3 };
// cfg.color is string, not "red" anymore.
console.log(cfg.color.toUpperCase());型が広がると困る理由
color の型が string に広がると、別の型へのインデックスアクセスなど、特定のリテラルを必要とする場所で使用できなくなります。
const cfg = { color: "red" } as { color: string };
// const exact: "red" = cfg.color; // Error: string not assignable to "red"
console.log(cfg.color);アノテーションがないと検証できません
アノテーションを削除すると正確な推論は維持されますが、安全網がなくなります。タイプミスや誤った形状が見逃されます。
const cfg = { color: "rad", retries: 3 };
// No error on the typo "rad" because nothing validates it.
console.log(cfg.color);検証の欠落
チェックがなければ、スペルを間違えた色のような無効な値がプログラム内をそのまま流れ、間違いが発生した場所から遠く離れた箇所で問題を引き起こす可能性があります。
const palette = { primary: "blu" }; // typo, no error
console.log(palette.primary); // "blu"satisfies 演算子の登場
satisfies 演算子は、式を型に対して検証しながら、推論された正確な型を保持します。両方の利点を得られます。
type Config = { color: string; retries: number };
const cfg = { color: "red", retries: 3 } satisfies Config;
console.log(cfg.color); // type is "red", value validatedsatisfies はリテラルを保持します
satisfies の後も、cfg.color は幅広い string ではなく、リテラル "red" のままです。推論が保持されます。
type Config = { color: string };
const cfg = { color: "red" } satisfies Config;
const exact: "red" = cfg.color; // OK
console.log(exact);satisfies は検証も行います
オブジェクトが型に一致しない場合、アノテーションと同様に satisfies がエラーを報告します。
type Config = { retries: number };
// const bad = { retries: "three" } satisfies Config; // Error
const good = { retries: 3 } satisfies Config;
console.log(good.retries);きっかけとなる例
キーが既知のルートで、値がハンドラー名であるルートマップを考えてみましょう。キーの自動補完と値の検証を両方実現したい場合に、satisfies が役立ちます。
type Routes = Record<string, { method: "GET" | "POST" }>;
const routes = {
home: { method: "GET" },
submit: { method: "POST" }
} satisfies Routes;
console.log(routes.home.method); // "GET" literal3つのアプローチの比較
アノテーション:検証しますが、型を広げます。アノテーションなし:正確ですが、検証されません。satisfies:検証し、正確さも保ちます。config には3つ目が最適です。
type C = { color: string };
const a: C = { color: "red" }; // widened
const b = { color: "red" }; // unvalidated
const c = { color: "red" } satisfies C; // validated + precise
console.log(a.color, b.color, c.color);satisfies を使う場面
型に適合する必要がある定数値を定義し、その後で正確な内容も使用したい場合は、常に satisfies を使用してください。
type Sizes = Record<string, number>;
const sizes = { sm: 8, md: 16, lg: 24 } satisfies Sizes;
// keys "sm" | "md" | "lg" stay known for autocomplete
console.log(sizes.md);理解度チェック:satisfies を使う理由
satisfies が存在する理由を理解できているか確認しましょう。
まとめ:satisfies が存在する理由
アノテーションは検証しますが型を広げ、アノテーションなしでは正確さが保たれるものの検証されず、satisfies は検証と正確な推論の両方を実現する、設定オブジェクトに最適な方法であることを学びました。
type C = { color: string };
const c = { color: "blue" } satisfies C;
const exact: "blue" = c.color;
console.log(exact);よくある質問
「satisfiesが存在する理由」レッスンは無料ですか?
はい。「satisfiesが存在する理由」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。
「satisfiesが存在する理由」で何を学びますか?
satisfiesが埋める、型注釈と型推論の間にある差を理解します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
TypeScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「satisfiesが存在する理由」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このTypeScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- satisfiesが存在する理由
- satisfiesと型注釈
- satisfiesとasアサーション
- satisfiesの実践的なパターン