カテゴリ: React 更新日: 2026/02/07

TypeScriptでPropsを型定義する方法を徹底解説!初心者でもわかるReactとTypeScript入門

TypeScriptでPropsを型定義する方法
TypeScriptでPropsを型定義する方法

先生と生徒の会話形式で理解しよう

生徒

「Reactでコンポーネントを作るときに、PropsをTypeScriptで型定義した方がいいと聞きました。どういう意味ですか?」

先生

「Propsとはコンポーネントに渡す値のことです。TypeScriptで型を決めると、間違った値を渡したときにすぐに気づけるようになりますよ。」

生徒

「なるほど!それなら安心して開発できそうです。実際にはどのように書くんですか?」

先生

「それでは具体的にTypeScriptでPropsを型定義する方法を見ていきましょう!」

1. Propsとは何かを理解しよう

1. Propsとは何かを理解しよう
1. Propsとは何かを理解しよう

Props(プロップス)とは、Reactのコンポーネントに外部から渡す値のことです。たとえば「挨拶文を表示するコンポーネント」に「名前」を渡すと、その名前を使って表示を変えることができます。

TypeScriptを使わない場合は、Propsにどんな値でも渡せてしまうため、誤って数字の代わりに文字を渡すとエラーが出てしまいます。TypeScriptで型を定義すれば、「このPropsは文字列だけですよ」と決めておけるので安心です。

2. 基本的なPropsの型定義

2. 基本的なPropsの型定義
2. 基本的なPropsの型定義

まずは文字列のPropsを受け取るコンポーネントを作ってみましょう。


import React from "react";

type GreetingProps = {
  name: string;
};

const Greeting: React.FC<GreetingProps> = ({ name }) => {
  return <h1>こんにちは、{name}さん!</h1>;
};

export default Greeting;
(画面に「こんにちは、太郎さん!」と表示されます。数字を渡そうとするとエラーになります)

ここではGreetingPropsという型を作り、nameは文字列と定義しています。その型をReact.FCに指定することで、Propsが正しく使われているかチェックできるようになります。

3. 複数のPropsを型定義する

3. 複数のPropsを型定義する
3. 複数のPropsを型定義する

次に複数の値をPropsとして渡す例です。数字や真偽値も組み合わせられます。


type ProfileProps = {
  name: string;
  age: number;
  isStudent: boolean;
};

const Profile: React.FC<ProfileProps> = ({ name, age, isStudent }) => {
  return (
    <div>
      <p>名前: {name}</p>
      <p>年齢: {age}</p>
      <p>学生: {isStudent ? "はい" : "いいえ"}</p>
    </div>
  );
};
(画面に「名前: 花子」「年齢: 20」「学生: はい」と表示されます)

このように型を決めておくと、年齢に文字列を渡すとエラーになり、間違いを事前に防げます。

4. Propsにオブジェクトを渡す型定義

4. Propsにオブジェクトを渡す型定義
4. Propsにオブジェクトを渡す型定義

実際のアプリでは、オブジェクトをPropsとして渡すこともよくあります。TypeScriptではオブジェクトの中身まで細かく型定義できます。


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

type UserCardProps = {
  user: User;
};

const UserCard: React.FC<UserCardProps> = ({ user }) => {
  return (
    <div>
      <h2>ID: {user.id}</h2>
      <p>名前: {user.name}</p>
    </div>
  );
};
(画面に「ID: 1」「名前: 花子」と表示されます)

このように型を別で定義して再利用すれば、コードが整理されて読みやすくなります。

5. Propsを省略可能にする(オプショナル型)

5. Propsを省略可能にする(オプショナル型)
5. Propsを省略可能にする(オプショナル型)

Propsによっては必須ではなく、省略できる場合もあります。そのときは?を付けてオプショナルにできます。


type MessageProps = {
  text?: string;
};

const Message: React.FC<MessageProps> = ({ text }) => {
  return <p>{text ? text : "デフォルトのメッセージ"}</p>;
};
(textを渡さない場合は「デフォルトのメッセージ」と表示されます)

このようにすることで「Propsがないときはどうするか」も決められるので便利です。

6. Propsに関数を渡す型定義

6. Propsに関数を渡す型定義
6. Propsに関数を渡す型定義

イベント処理などで関数をPropsとして渡すこともよくあります。TypeScriptでは関数の型も定義できます。


type ButtonProps = {
  onClick: () => void;
};

const Button: React.FC<ButtonProps> = ({ onClick }) => {
  return <button onClick={onClick}>クリック</button>;
};
(ボタンを押すと指定した関数が実行されます)

このように関数の型を定義しておけば、引数や戻り値の間違いを防げます。

7. 型定義を使うメリットを理解しよう

7. 型定義を使うメリットを理解しよう
7. 型定義を使うメリットを理解しよう

Propsを型定義するメリットは以下の通りです。

  • 間違った値を渡すとすぐにエラーになる
  • エディタが自動補完してくれるので効率的
  • コードを読む人にとってPropsの内容が一目でわかる

初心者にとっては、エラーを早く見つけられるだけでなく、「このコンポーネントは何を受け取るのか」が分かりやすくなる点も大きな助けになります。

まとめ

まとめ
まとめ

今回の記事では、React開発におけるTypeScriptを用いたPropsの型定義について、基礎から応用まで詳しく解説してきました。モダンなフロントエンド開発において、ReactとTypeScriptの組み合わせはもはや標準といっても過言ではありません。Propsに型を定義するということは、単にエラーを防ぐための作業ではなく、プログラムの意図を明確にし、チーム全体の開発効率を飛躍的に高めるための重要なステップです。

型定義がもたらす開発体験の向上

TypeScriptを導入する最大の恩恵は、エディタ上での「静的解析」と「自動補完」にあります。これまでJavaScriptだけで開発していた時は、Propsとして何を渡すべきか、そのコンポーネントの定義ファイルを確認しに行く必要がありました。しかし、型定義が行われていれば、VS Codeなどのエディタが即座に必要なプロパティを提案してくれます。また、必須のPropsを渡し忘れたり、数値を入れるべき場所に文字列を入れてしまったりした際、ブラウザで実行する前にコード上で赤線が出て教えてくれるため、バグの混入を未然に防ぐことができます。

基本的な型定義の振り返り

基本的には、type(型別名)またはinterfaceを使ってPropsの構造を定義します。Reactコンポーネント側では、React.FC(Functional Component)というジェネリクス型を使用することで、Propsに型を適用させることができます。


import React from "react";

// 表示用データの型定義
type UserInfoProps = {
  userName: string;
  userAge: number;
  isPremium?: boolean; // オプショナルなプロパティ
};

// コンポーネントへの適用
const UserInfo: React.FC<UserInfoProps> = ({ userName, userAge, isPremium = false }) => {
  return (
    

ユーザー情報

名前: {userName}

年齢: {userAge}歳

プラン: {isPremium ? "プレミアム" : "無料"}

); }; export default UserInfo;
(画面に名前と年齢、そしてプランが表示されます。isPremiumを渡さない場合はデフォルトで「無料」が表示されます)

Next.jsや大規模開発での応用

Next.jsのようなフレームワークを使用する場合でも、この基本的な考え方は変わりません。APIから取得したデータの配列をPropsとして渡す場合は、配列の型定義を組み合わせます。


import React from "react";

// リスト表示用のコンポーネント例
const TodoList = ({ items }) => {
  return (
    <ul>
      {items.map((item) => (
        <li key={item.id}>{item.title}</li>
      ))}
    </ul>
  );
};

export default TodoList;

上記はJavaScriptの例ですが、これをTypeScriptにする際は、items: Array<Todo>のように定義することで、ループ処理内でのプロパティ参照も安全になります。

型安全な開発を習慣にしよう

最初は「型を書くのが面倒だ」と感じるかもしれません。しかし、プロジェクトの規模が大きくなればなるほど、過去に自分が書いたコードの内容を忘れてしまいます。その時、過去の自分からのメッセージとして「このコンポーネントはこれが必要だよ」と教えてくれるのがTypeScriptの型定義です。

これまでに学んだ「基本の型」「オブジェクトの型」「関数の型」「オプショナルな定義」を組み合わせれば、日常的なReact開発のほとんどの場面に対応できるはずです。まずは小さなコンポーネントから、一歩ずつ型を意識して書いてみることをお勧めします。

先生と生徒の振り返り会話

生徒

「先生、ありがとうございました!Propsの型定義についてかなりイメージが湧いてきました。特にオプショナルな ? を使う方法は、表示項目が変わるUIで重宝しそうですね。」

先生

「その通りですね。何でも必須にしてしまうとコンポーネントの使い勝手が悪くなるので、状況に合わせて柔軟に定義するのがコツです。配列や関数の型はどうでしたか?」

生徒

「最初は onClick: () => void; という書き方に驚きましたが、戻り値がない関数だとはっきり分かっていいですね。以前、引数の渡し間違いでバグを出したことがあるので、TypeScriptならそれを防げるんだなと感動しました。」

先生

「素晴らしい気づきです!型定義は単なる制約ではなく、自分やチームメンバーへのドキュメントとしての役割も持っています。エディタが補完を出してくれるのも、型があるからこそです。」

生徒

「確かに、コードを書きながら次に何をすべきかエディタが教えてくれるのはすごく楽でした。あと、React.FCを使うことで children の扱いなども整理されるのがいいですね。」

先生

「最新のReactでは、children を含める場合は明示的に型を定義することが推奨されていますが、基本的な考え方は今日学んだことの延長線上にあります。次は、Generics(ジェネリクス)を使ったさらに高度な再利用についても学んでいきましょうか。」

生徒

「はい!もっと深くTypeScriptを使いこなせるようになりたいです。これからもどんどん実践的なコードを書いて練習してみます!」

先生

「その意気です。エラーが出てもそれはTypeScriptがあなたを助けてくれている証拠ですから、怖がらずに挑戦していきましょう。応援していますよ!」

カテゴリの一覧へ
新着記事
New1
React
Reactコンポーネントの再利用と分割を完全マスター!初心者でもわかるコンポーネント設計
New2
React
ReactでAxiosインターセプターの使い方を完全ガイド!初心者でもわかるリクエストとレスポンスの処理方法
New3
React
JSXの書き方!初心者でもわかるReactタグと属性の基本ルール解説
New4
React
ReactとDockerを使った開発環境構築の基本を徹底解説!初心者でもわかるReactとDockerの連携方法
人気記事
No.1
Java&Spring記事人気No1
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.3
Java&Spring記事人気No3
React
Reactのイベントハンドリングのアンチパターンまとめ!初心者でもわかる注意点
No.4
Java&Spring記事人気No4
React
Reactのカスタムフックの作り方を完全ガイド!再利用可能なロジックを切り出す仕組み
No.5
Java&Spring記事人気No5
React
ReactでFetch APIのローディング状態を管理する方法|初心者にもわかる解説
No.6
Java&Spring記事人気No6
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.7
Java&Spring記事人気No7
React
ReactのuseStateとuseEffectでよくあるエラーと解決方法ガイド!初心者でもわかるReactフック
No.8
Java&Spring記事人気No8
React
Reactでファイルアップロードを実装する方法を解説!Fetch APIで画像やPDFを送る仕組みを初心者向けに紹介