TypeScriptのオブジェクト型(type / interface の基本) – 6/13

前回の記事では TypeScriptの関数型 を解説しました。

TypeScriptでは

  • 引数
  • 戻り値

に型を指定することで、関数の仕様を明確にすることができます。

今回の記事では オブジェクト型 を解説します。

オブジェクト型はTypeScriptの中でも非常に重要な概念です。

この記事では次の内容を解説します。

  • オブジェクト型とは
  • typeによる型定義
  • interfaceによる型定義
  • Optionalプロパティ
  • readonlyプロパティ

ReactやAPI開発でも頻繁に使うため、しっかり理解しておきましょう。


オブジェクト型とは

JavaScriptでは次のようなオブジェクトをよく使います。

const user = {
  name: "Taro",
  age: 20
}

このオブジェクトには

name
age

という2つのプロパティがあります。

JavaScriptでは、この構造に特別な制約はありません。

例えば次のようなコードも書けてしまいます。

user.age = "twenty"

これは明らかに問題があります。

TypeScriptでは、オブジェクトの構造を 型として定義できます。


typeによるオブジェクト型

TypeScriptでは type を使って型を定義できます。

type User = {
  name: string
  age: number
}

この型を使ってオブジェクトを作ると

const user: User = {
  name: "Taro",
  age: 20
}

となります。

もし次のようなコードを書くと

const user: User = {
  name: "Taro",
  age: "twenty"
}

TypeScriptはエラーを出します。

理由

string は number に代入できない

からです。


オブジェクト型のメリット

オブジェクト型を定義することで次のメリットがあります。

データ構造が明確になる

例えば次のコードです。

function createUser(user: User) {
}

この関数を見るだけで

User型のデータが必要

ということが分かります。


IDE補完が強力になる

VSCodeでは次のように補完されます。

user.name
user.age

これはTypeScriptの型情報を利用しています。


バグを防げる

間違ったデータ構造を防ぐことができます。

例えば

user.address

のような存在しないプロパティはエラーになります。


Optionalプロパティ

TypeScriptでは Optionalプロパティ を使うことができます。

Optionalとは

省略可能

という意味です。

type User = {
  name: string
  age?: number
}

この場合

const user1: User = {
  name: "Taro",
  age: 20
}

const user2: User = {
  name: "Taro"
}

も正しいコードになります。

Optionalプロパティは

  • APIレスポンス
  • ユーザー入力

などでよく使われます。


readonlyプロパティ

TypeScriptでは readonly を使って変更不可のプロパティを作れます。

type User = {
  readonly id: number
  name: string
}

この場合

user.id = 10

はエラーになります。

readonlyは

  • ID
  • 作成日時
  • 固定データ

などでよく使われます。


interfaceによる型定義

TypeScriptでは interface でもオブジェクト型を定義できます。

interface User {
  name: string
  age: number
}

使い方は type と同じです。

const user: User = {
  name: "Taro",
  age: 20
}

typeとinterfaceの違い

初心者がよく迷うのが

type
interface

の違いです。

基本的な目安は次の通りです。

用途おすすめ
オブジェクト定義interface
複雑な型type

ただし実務では

どちらでもOK

なケースも多いです。


実務での利用例

オブジェクト型は実務で非常によく使われます。

APIレスポンス

type User = {
  id: number
  name: string
  email: string
}

APIデータを型として定義します。


React props

type Props = {
  title: string
}

コンポーネントの入力データです。


設定オブジェクト

type Config = {
  theme: string
  darkMode: boolean
}

アプリの設定を管理します。


まとめ

この記事では TypeScriptのオブジェクト型 を解説しました。

重要なポイント

  • typeでオブジェクト型を定義できる
  • interfaceでも定義できる
  • Optionalプロパティがある
  • readonlyプロパティがある

オブジェクト型は

TypeScriptで最も重要な型

の一つです。

ReactやAPI開発でも頻繁に使うため、しっかり理解しておきましょう。


次の記事

次回は

TypeScriptの配列型

を解説します。

配列型では

  • number[]
  • Array
  • オブジェクト配列

などを詳しく説明します。

コメント

タイトルとURLをコピーしました