TypeScriptその③

Next.js-4.Typescript編-

useStateの型宣言

useStateの型宣言は下記にようにします。

const [count, setCount] = useState<number>(0);

API のレスポンス型宣言

APIのレスポンスで受け取った値の型宣言は下記のようにします。

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

async function fetchUser(): Promise<User> {
  const response = await fetch("https://example.com/api/user/1");
  return response.json(); // `User` 型のデータが返ることを期待
}

このようにPromiseオブジェクト(非同期処理の結果を受け取るためのオブジェクト)にくっつける形で定義します。

ただ、API データ取得関数は色々なデータを受け取る想定で使い回すことが多いので、その場合は型を後から決める仕組み「ジェネリクス」を使用することがあります。

async function fetchData<T>(url: string): Promise<T> {
  const response = await fetch(url);
  return response.json();
}

// `User` 型のデータを取得
fetchData<User>("https://example.com/api/user").then((user) => {
  console.log(user.name);
});

// `Post` 型のデータを取得
fetchData<Post>("https://example.com/api/post").then((post) => {
  console.log(post.title);
});

このようにレスポンスの型をどんなデータでも扱えるようにすることで、関数の使い回しができます。

また、fetchData<T>と関数名の後にもジェネリクスをつけていますが、これは「ジェネリクス(T)を使う関数を作る」という意味合いでPromise<T>とセットになっています。

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