Predicate関数とsatisfies演算子
Predicateの戻り値型を持つカスタム型ガードを記述し、satisfies演算子で型を拡大せずにオブジェクトを検証します
「Predicate関数とsatisfies演算子」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全3レッスンが含まれています。
導入
目標:型を絞り込む述語関数(例:value is T)を作成し、型を拡大せずに形状をチェックするためにsatisfiesを使います。
- カスタムガード = 再利用可能な実行時チェック
satisfies= リテラルを保持するコンパイル時の形状チェック
述語の基本
述語関数はx is Typeを返します。チェック後、そのスコープ内では変数の型が絞り込まれます。
function isNumber(x: unknown): x is number {
return typeof x === "number"
}
function demo(a: unknown) {
if (isNumber(a)) {
// inside: a is number
return a.toFixed(2)
}
return "not a number"
}形状ガード
ガードはオブジェクトの形状をチェックします。チェックに通ればUserとして絞り込まれ、安全に使用できます。
type User = { id: number; name: string }
function isUser(v: unknown): v is User {
return typeof v === "object" && v !== null &&
"id" in v && "name" in v &&
typeof (v as any).id === "number" &&
typeof (v as any).name === "string"
}
function printUser(u: unknown) {
if (isUser(u)) {
console.log(u.name.toUpperCase())
} else {
console.log("invalid user")
}
}境界を越えた利用
ガードによって、関数の境界を越えて安全にデータを受け渡せます。外側ではunknown、内部では制御されたUserとして扱います。
function fetchAndPrint(json: string) {
const value: unknown = JSON.parse(json)
if (isUser(value)) {
// value narrowed to User
console.log(`User #${value.id}: ${value.name}`)
} else {
console.log("Bad payload")
}
}satisfies(設定)
satisfiesは式がConfigeに適合しているかをチェックしますが、変数のリテラル型は保持します。
type Config = { mode: "dev" | "prod"; retries: number }
const cfg = {
mode: "prod",
retries: 3,
// timeout: 1000, // Error with satisfies if not in type
} satisfies Config
// cfg.mode is still the literal "prod" (not widened to string)
// and adding unknown keys raises an error at compile-timesatisfies(配列)
配列では、as const satisfiesによって要素の形状を検証します。リテラル値が保持され、自動補完も強化されます。
type Route = { path: `/${string}`; method: "GET" | "POST" }
const routes = [
{ path: "/", method: "GET" },
{ path: "/login", method: "POST" }
] as const satisfies ReadonlyArray<Route>
// each element is checked against Route, literals preserved for DXsatisfiesのチェック
クイックチェック:satisfiesは実際には何をするのでしょうか。
まとめ
まとめ:述語(x is T)は契約を表し、satisfiesは形状を確認しながらリテラル型を保持します。両方を組み合わせて使います。
よくある質問
「Predicate関数とsatisfies演算子」レッスンは無料ですか?
はい。「Predicate関数とsatisfies演算子」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全3レッスンが含まれています。
「Predicate関数とsatisfies演算子」で何を学びますか?
Predicateの戻り値型を持つカスタム型ガードを記述し、satisfies演算子で型を拡大せずにオブジェクトを検証します ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
TypeScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。
「Predicate関数とsatisfies演算子」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このTypeScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 網羅的なswitchとneverチェック
- Predicate関数とsatisfies演算子
- 関数の境界をまたぐunionの絞り込み