The Concise TypeScript Book 型アノテーション入門:変数・関数・オブジェクトへの型の付け方完全ガイド
文档教程【免费下载链接】typescript-bookThe Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source.项目地址https://gitcode.com/gh_mirrors/typ/typescript-book点击查看免费下载导读本記事は、オープンソース書籍The Concise TypeScript Book本リポジトリの「型アノテーションType Annotations」章を基盤に、変数・関数パラメータ・戻り値・オブジェクトリテラルなど、各構文位置での型注釈の書き方と、TypeScript の型推論との使い分けを体系的に解説する技術ガイドです。読了後には、型アノテーションと型推論の境界を理解し、シグネチャは注釈・本体のローカル変数は推論・オブジェクトリテラルは明示という実践的なコーディング規約を自分のコードに適用できるようになります。型アノテーションとは何か型アノテーションtype annotationとは、TypeScript のコード中で明示的に型を書き添える構文です。値の後ろまたは宣言の該当位置にコロン:を挟んで型を記述します。これにより、コンパイラは変数や関数に対して開発者が意図した型を直接知ることができます。型アノテーションの最も基本的な形は、var・let・constで宣言した変数に型を追加する形です原典website/src/content/docs/book/type-annotations.md。const x: number 1;TypeScript は、特に単純な型については型推論type inferenceを適切に行うため、ほとんどの場合、このような宣言は不要です。型アノテーションは「型を指定できる」手段であって「必ず指定しなければならない」ものではなく、推論が十分に働く場面ではコードを冗長にしないことが推奨されています。なお、型アノテーションと混同されがちな**型アサーションtype assertionは、asキーワードを使って「開発者が型についてより多くの情報を持っている」ことをコンパイラに伝える構文で、エラーを抑制する効果がありますexploring-the-type-system.md の Type Declaration と Type Assertion の節。型アノテーションが「宣言時に型を指定する」のに対し、型アサーションは「既存の値に対して型を上書き指定する」点が異なります。一般に、オブジェクトの構造が事前に分かっている場合は型アサーションよりも型宣言type declaration**を使うことが推奨されます型アサーションは excess property checking を実行しないためです。関数への型アノテーションパラメータへの型注釈関数では、パラメータ引数に型アノテーションを追加できます。function sum(a: number, b: number) { return a b; }この場合、aとbはnumber型であることが宣言されます。型注釈のないパラメータは暗黙的にanyと扱われるため、strictモードTypeScript 6.0 以降はデフォルトで有効ではエラーになることがあります。パラメータへの型注釈は、関数の呼び出し側に対して「どのような値が渡せるか」を伝える最も基本的なインターフェースです。無名関数ラムダ関数への型注釈次は、**無名関数匿名関数、ラムダ関数とも呼ばれる**を使用した例です。const sum (a: number, b: number) a b;アロー関数式でも、パラメータの直後に同じ構文で型注釈を付けることができます。無名関数はコールバックとして渡される場面が多く、その場合 TypeScript は**文脈に基づく型付けcontextual typing**によってパラメータの型を推論することもありますが、関数単体を定義する場合は明示的な注釈が有効です。デフォルト値があるパラメータの注釈省略パラメータにデフォルト値がある場合、これらの注釈は省略できます。const sum (a 10, b: number) a b;デフォルト値10から TypeScript がaの型をnumberと推論できるため、aに対する型注釈は不要です。一方、デフォルト値のないbには引き続き型注釈が必要です。このように、デフォルト値は型推論の情報源としても機能します。戻り値の型アノテーション関数には戻り値の型アノテーションも追加できます。戻り値の型は、パラメータリストの閉じ括弧の後ろに: 型の形で書きます。const sum (a 10, b: number): number a b;この例では、sumがnumberを返すことが明示されています。TypeScript はa bの結果から戻り値の型をnumberと推論できますが、より複雑な関数では明示的な戻り値型が特に有用です。実装の前に戻り値の型を記述することで、関数の設計を先に考えて整理しやすくなります。// 複雑な処理を持つ関数では、実装前に戻り値の型を決めておくと設計が明確になる function processUser(input: string): { name: string; age: number } { // ... ここに複雑な処理を実装する return { name: Alice, age: 30 }; }戻り値の型注釈は、関数のシグネチャを「契約」として明確にし、実装中に意図せず異なる型を返してしまうミスをコンパイル時に検出できるようにする効果もあります。型推論と注釈の使い分け本書の実践的指針原典では、型アノテーションの適用方針として以下の実践的指針が示されていますtype-annotations.md。一般には、型シグネチャには注釈を付ける一方、関数本体内のローカル変数には付けず、オブジェクトリテラルには常に型を追加することを検討してください。これは次の 3 つのルールに分解できます。対象推奨理由型シグネチャ関数のパラメータ・戻り値注釈を付ける呼び出し側との契約を明確にし、実装前に設計を固められる関数本体内のローカル変数注釈を付けないTypeScript の型推論が十分正確で、冗長な注釈はノイズになるオブジェクトリテラル常に型を追加するリテラルは推論が広がりやすく、明示しないと想定外の型になることがあるローカル変数の推論に任せる理由TypeScript の型推論は、特に単純な型については非常に優れています。次の例では、xはconst宣言のため値が後から変更できず、リテラル型xとして推論されます。一方、yはlet宣言のため後から変更でき、より広いstring型として推論されますliteral-inference.md。const x x; // 値は変更できないため、リテラル型 x として推論される let y y; // 後から変更できるため、string 型として推論されるこのように、宣言方法const/letによっても推論結果が変わるため、ローカル変数に逐一注釈を付けるより、TypeScript の推論に任せた方が自然で読みやすいコードになります。オブジェクトリテラルに型を追加する理由オブジェクトリテラルはプロパティごとの推論が「広がりwidening」やすいため、明示的な型注釈を付けることで意図した型に固定できます。たとえば、exploring-the-type-system.md の Explicit Type Annotation の節にあるように、プロパティxはデフォルトではnumberと広がって推論されますが、注釈で「1 | 2 | 3」のようなリテラル型のユニオンに固定できます。// 注釈なし: x は number に広がって推論される const v { x: 1, }; v.x 3; // 有効 // 注釈あり: x はリテラル型ユニオン 1 | 2 | 3 に固定される const w: { x: 1 | 2 | 3 } { x: 1, }; w.x 3; // 有効 w.x 100; // 無効型アサーションで推論を調整する推論の結果を調整したい場合は、as constや特定の型を使った型アサーションも選択肢ですliteral-inference.md。let o { x: a as const, // a というリテラル型に固定 }; // または let o { x: a as X, // 事前に定義した型 X にアサート };型アノテーションの実際の適用例型アノテーションと型推論の組み合わせは、実際のプロジェクトでは次のような形で現れます。たとえば、本リポジトリのウェブサイトは Astro と TypeScript で構成されており、website/tsconfig.json はastro/tsconfigs/strictを継承してstrictモードの型チェックを有効にしています。strictモードでは、型注釈のないnull/undefinedの扱いや暗黙のanyが厳格に検査されるため、型アノテーションの書き方がコード品質に直接影響しますgetting-started-with-typescript.md の Configuration / strict の節。実際の開発では、次のような使い分けが典型的です。// シグネチャには注釈を付ける function fetchUser(id: number): PromiseUser { // 本体のローカル変数は推論に任せる const url /users/${id}; // string と推論される const headers { Accept: application/json }; // オブジェクトは型を追加する return fetch(url, { headers }).then((res) res.json()); } // オブジェクトリテラルには常に型を追加する const config: { retries: number; timeout: number } { retries: 3, timeout: 5000, };このように、「どこに注釈を付けるか」を一貫したルールにすることで、型推論の強みを活かしつつ、シグネチャとデータ構造だけは明示的に型を宣言する、読みやすく保守しやすいコードになります。まとめ型アノテーションは、TypeScript のコードに明示的に型を記述する構文であり、変数・関数パラメータ・戻り値・オブジェクトリテラルなどさまざまな位置に適用できます。TypeScript の型推論が強力であるため単純な変数では省略が推奨されますが、関数シグネチャとオブジェクトリテラルでは明示的な注釈が設計の明確化と型安全性の向上に大きく貢献します。本書The Concise TypeScript Bookの型システムに関する章は、目次table-of-contents.md から辿ることができ、型アノテーションの周辺テーマとして型推論Literal Inference、型の代入とナローイングAssignments、strictNullChecks などの章が続きます。型アノテーションはこれらすべての基礎となる構文ですので、本書の型システム解説を読み進める際の土台としてぜひ活用してください。赞分享文档教程【免费下载链接】typescript-bookThe Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source.项目地址https://gitcode.com/gh_mirrors/typ/typescript-book点击查看免费下载相关推荐The Concise TypeScript Book 完全ガイドinterface と type の使い分けと型定義の実践The Concise TypeScript Book 完全ガイドinterface と type の使い分けと型定義の実践 インターフェース interf文档教程es-toolkit の fromPairs 完全ガイドキーと値のペア配列をオブジェクトへ変換するes toolkit の fromPairs 完全ガイドキーと値のペア配列をオブジェクトへ変換する fromPairs は、 a, 1 , b, 2前端后端The Concise TypeScript Book で学ぶ TypeScript 入門型システム・型消去・ダウンレベリングの基礎The Concise TypeScript Book で学ぶ TypeScript 入門型システム・型消去・ダウンレベリングの基礎 本章 website/文档教程上一篇Unleash API 设计规范POST/PUT 请求体如何优雅处理新增可选字段向后兼容实战指南下一篇Apache DolphinScheduler 任务实例Task Instance管理实战批量任务查询与日志排查、流式任务 SavePoint 与停止创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考