object type オブジェクト型
最終更新:2026-10-22
object type オブジェクト型
オブジェクト型は「プロパティ名: 型」の構造でオブジェクトを記述します。1 回しか使わないならインラインで書き、再利用するなら interface か type に任せます。TS は「形状の一致」で互換性を判断します。
| グループ | 型の組み合わせ |
|---|---|
| 種類 | 型 |
| strict モード | 不要 |
ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。
📝 構文
const user: { id: number; name: string; tags?: string[] } = {
id: 1,
name: "Ada",
};
⚙️ パラメータ
| { name: string } | セミコロンかカンマで区切られたプロパティ宣言で、値の型は任意の型(ネストしたオブジェクトを含む)にできます |
|---|---|
| ?/readonly | オプションと読み取り専用の修飾子は、インラインのオブジェクト型にも同じように適用されます |
戻り値:戻り値はありません。オブジェクト型は純粋な型レベルの概念であり、実行時コードを一切生成しません。
▶ サンプル
下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:
出力:
5 no label
(トランスパイル後の実行出力。point に型に存在しない z フィールドを書くと、余分なプロパティチェックでエラーになります)
💡 ポイント
ℹ️ 説明 TS は構造的型システムです。形状さえ一致すれば互換であり、特定のクラスやインターフェースを明示的に継承する必要はありません(「ダックタイピング」)。
💡 ヒント 構造が 2 箇所以上から参照されるなら interface/type に抽出しましょう。エラーメッセージが短くなり、修正も 1 箇所で済みます。
⚠️ 注意 オブジェクトリテラルの代入では「余分なプロパティチェック」が発火します。型に存在しないフィールドを書くと即座にエラーになり、先に変数に代入してから渡すとチェックを迂回できます。
🏷️ 関連型の組み合わせ
💡 関連ケース
ケースは今後追加予定です。
📚 関連チュートリアル
❓ よくある質問
Q 構造的型(ダックタイピング)とは何ですか?
A 型の互換性は「必要なプロパティとその型があるかどうか」だけを見て、宣言がどこから来たかは見ません。{x: 1, y: 2, z: 3} は {x: number; y: number} に代入でき、余分な z は問題になりません。
Q インラインのオブジェクト型と interface はどちらを使うべきですか?
A 1 回しか使わず単純ならインラインにします。再利用や拡張が必要、または IDE に名前でヒントを出させたいなら interface/type を使いましょう。
Q 関数の引数がオブジェクトの場合はどう注釈しますか?
A 引数の位置に直接構造を書きます。function draw(p: { x: number; y: number }) {} のようにです。構造が複雑なら先に interface を定義してから参照します。