TypeScript と Promise の使い方

TypeScript は、静的型を追加することで JavaScript 開発を強化します。非同期コードを使用する場合、将来完了する操作を処理するために Promise が使用されます。TypeScript は、型の安全性と明確さを備えた Promise を管理するためのツールを提供します。このガイドでは、基本的な使用方法から高度なシナリオまで、TypeScript で Promise を操作する方法について説明します。

約束を理解する

promise は、非同期操作の最終的な完了または失敗を表すオブジェクトです。操作の結果またはエラーを処理するメソッドを提供します。TypeScript では、promise を型指定して、期待されるデータ型で解決されるようにすることができます。

Promiseの基本的な使い方

TypeScript で Promise を作成して使用するのは簡単です。以下は文字列で解決する Promise の例です。

function fetchData(): Promise {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Data fetched successfully!");
    }, 1000);
  });
}

fetchData().then((data) => {
  console.log(data); // Outputs: Data fetched successfully!
}).catch((error) => {
  console.error("Error:", error);
});

この例では、fetchData は文字列で解決される Promise を返します。then メソッドは解決された値を処理し、catch はエラーを処理します。

Async/Await による Promise の処理

TypeScript は async/await 構文をサポートしており、これにより Promise をより読みやすく操作できます。Promise で async/await を使用する方法は次のとおりです。

async function fetchDataAsync(): Promise {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Data fetched successfully!");
    }, 1000);
  });
}

async function processData() {
  try {
    const data = await fetchDataAsync();
    console.log(data); // Outputs: Data fetched successfully!
  } catch (error) {
    console.error("Error:", error);
  }
}

processData();

この例では、fetchDataAsync 関数は async として宣言されており、await キーワードを使用して、promise が解決するまで待機できます。エラーは try/catch ブロックを使用してキャッチされます。

ジェネリックによる Promise の型付け

TypeScript では、ジェネリックを使用して、Promise が解決するデータの型を指定できます。これにより、コード全体で型が正しく管理されます。以下は、型指定された Promise の例です。

interface User {
  id: number;
  name: string;
}

function fetchUser(): Promise {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve({ id: 1, name: "John Doe" });
    }, 1000);
  });
}

fetchUser().then((user) => {
  console.log(user.id, user.name); // Outputs: 1 John Doe
}).catch((error) => {
  console.error("Error:", error);
});

この例では、fetchUserUser オブジェクトで解決される Promise を返します。型はジェネリックを使用して指定され、型の安全性が保証されます。

TypeScript で API 呼び出しを使用して Promise を使用する

Promise は、非同期データ取得を処理するために API 呼び出しでよく使用されます。TypeScript の型システムは、API からの応答の管理に役立ちます。

async function getUserData(userId: number): Promise {
  const response = await fetch(`https://api.example.com/users/${userId}`);
  if (!response.ok) {
    throw new Error("Network response was not ok.");
  }
  const data: User = await response.json();
  return data;
}

getUserData(1).then((user) => {
  console.log(user);
}).catch((error) => {
  console.error("Error:", error);
});

この例では、fetch を使用して API 呼び出しを行い、promise と async/await を使用して応答を処理する方法を示します。応答は User として型指定され、型の安全性が確保されます。

結論

TypeScript で Promise を使用すると、非同期操作の型の安全性と明確さが向上します。TypeScript の型付けシステム、async/await 構文、ジェネリックを使用することで、開発者は Promise を効果的に管理し、より信頼性の高いアプリケーションを構築できます。