🐙

TypeScriptのオブジェクトについて理解する

2023/09/22に公開

概要

TypeScriptでよく使用されるobject型について理解するために、サバイバルTypeScriptを参考に、自分用にまとめたもの。
参考:https://typescriptbook.jp/reference/values-types-variables/object

オブジェクト型とは

  • JavaScriptでプリミティブ以外を指す型。
  • 中身はプロパティの集合体(keyとvalueの組み合わせ)
  • プリミティブ型、関数、オブジェクトも入れることができる。
  • オブジェクト型は中の値が同じでも、インスタンスが異なると同一のものとは判断されない。
  • JavaScriptではオブジェクトリテラルを用いて簡単に記述できる。
  • JSONの由来はJavaScriptなので、JSONをそのままオブジェクトリテラルとして解釈可能

型注釈の利用について

  • オブジェクト型は型推論が可能だが、型注釈を利用して、安全に使用することを推奨
  • 型指定にObject型も設定可能だが、安全性の観点から避ける。

読み取り専用の指定(readonly属性)

  • 型注釈にreadonlyを指定することで、読み取り専用にできる。
  • readonly属性は再帰的でなく、ネストされたオブジェクト内の要素に対しては読み取り専用にならない。
  • あくまでTypeScript内での概念のため、コンパイル後のJavaScriptでは適用されない。

constとreadonlyの違い

  • constは変数への代入を不可にするもの、readonlyはオブジェクトへの代入を不可にするもの

余剰プロパティチェック

  • オブジェクト型の変数に、別のオブジェクトを代入する際、代入元のオブジェクト内に持っていないプロパティがあるとエラーが出る。
  • チェックはオブジェクトリテラルのみで、変数を経由した代入では検査されない。(利便性が落ちるため)

object型とObject型は違う

  • object型はオブジェクトのみ代入できる型、Object型はプロパティを持つ値ならなんでも代入可能。
  • Object型はインターフェース。
  • {}型はプロパティを持たないオブジェクトを表す。
  • どれもnullとundefinedは代入不可
GitHubで編集を提案

Discussion