読み込み中...

【TypeScript】fetchの使い方を徹底解説!たった12のステップ

TypeScriptでのfetch関数の完全ガイド TypeScript
この記事は約31分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Webアプリケーションの開発において、TypeScriptとfetchの組み合わせは欠かせないテクノロジーとなっています。

この記事では、TypeScriptを使用してfetch関数を利用する方法や注意点、そしてカスタマイズ方法を徹底的に解説します。

このガイドを通して、TypeScriptでのfetch関数の使い方を完璧にマスターする手助けをします。

●TypeScriptとは?

TypeScriptは、Microsoftが開発したJavaScriptのスーパーセットであり、型を持つことでコードの品質を向上させることができるプログラム言語です。

JavaScriptの全ての機能を継承しており、加えて静的型チェックやインタフェース、ジェネリクスなどの強力な機能を備えています。

○TypeScriptの基本

TypeScriptは、JavaScriptに型を追加した言語として位置づけられています。

これにより、大規模なプロジェクトでも安全にコードを書くことができ、バグを早期に発見することが可能です。

下記のサンプルコードは、TypeScriptでの基本的な変数の型定義の方法を表しています。

let name: string = "Taro";
let age: number = 30;
let isStudent: boolean = false;

このコードでは、変数nameに文字列の型を、変数ageに数値の型を、変数isStudentに真偽値の型をそれぞれ割り当てています。

TypeScriptはこのような型の情報をもとに、コンパイル時に変数の使用方法が適切であるかどうかをチェックします。

○TypeScriptとJavaScriptの違い

TypeScriptとJavaScriptの最大の違いは、前述のようにTypeScriptが静的な型チェックを持つことです。

しかし、その他にもTypeScript独自の機能や文法が多数存在します。

□インタフェース

TypeScriptには、オブジェクトの形状を定義するためのinterfaceという機能が存在します。

これを使用することで、特定のオブジェクトが持つべきプロパティやメソッドの型を定義することができます。

interface Person {
  name: string;
  age: number;
  greet(): void;
}

const taro: Person = {
  name: "Taro",
  age: 30,
  greet() {
    console.log("Hello, " + this.name);
  }
};

taro.greet(); // "Hello, Taro"と表示されます。

□ジェネリクス

ジェネリクスを使用することで、一般的な型を持つコンポーネントを作成することができます。

この機能は、再利用可能なコンポーネントや関数を作成する際に非常に役立ちます。

例として、Arrayのような型があります。

Arrayは、任意の型の要素を持つことができますが、TypeScriptでは特定の型の要素だけを持つArrayを作成することができます。

let numbers: Array<number> = [1, 2, 3];
let names: Array<string> = ["Taro", "Jiro", "Saburo"];

□アクセス修飾子

TypeScriptでは、クラスのプロパティやメソッドに対して、publicprivateprotectedのアクセス修飾子を付与することができます。

これにより、クラス外部からのアクセスを制限することができます。

□型エイリアス

型エイリアスを使用すると、既存の型に新しい名前を付けることができます。

これにより、独自の型を定義し、より読みやすいコードを書くことができます。

●fetchとは?

fetchは、WebブラウザやNode.jsなどの環境で、外部リソースやAPIにアクセスするためのメソッドです。

このメソッドは、Promiseベースのインターフェースを持つため、非同期処理としてデータを取得します。

最近のフロントエンド開発やWebアプリケーションでは、fetchが頻繁に使用されることが増えてきました。

これにより、ページをリロードせずにサーバーからデータを取得したり、データを送信したりすることが簡単になりました。

○基本的なfetchの使い方

fetchメソッドは、単純にURLを指定することでリソースにアクセスすることができます。

その基本的な使い方を表すサンプルコードを紹介します。

// URLからデータを取得する例
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => {
    console.log(data); // 取得したデータを表示
  })
  .catch(error => {
    console.error('エラーが発生:', error);
  });

このコードでは、指定したURLからデータを取得しています。

取得したデータはJSON形式と仮定して、response.json()を使ってJSONとして解析します。

その後、取得したデータをコンソールに表示しています。もし何らかのエラーが発生した場合は、catchブロック内の処理が実行されます。

○fetchの戻り値

fetchメソッドの戻り値はPromiseオブジェクトです。

このPromiseは、Responseオブジェクトを解決値として持ちます。

Responseオブジェクトには、取得したリソースの内容やステータスコード、ヘッダー情報などが含まれています。

サンプルコードをさらに詳しく見てみましょう。

fetch('https://api.example.com/data')
  .then(response => {
    // ステータスコードが200番台でなければエラーとして処理
    if (!response.ok) {
      throw new Error('ネットワーク応答が不正です。');
    }
    return response.json();
  })
  .then(data => {
    console.log(data); // 取得したデータを表示
  })
  .catch(error => {
    console.error('エラーが発生:', error);
  });

上記のコードでは、fetchの結果を受け取った際に、まずHTTPのステータスコードをチェックしています。

ステータスコードが200番台でなければ、エラーとして処理を中断し、catchブロックへ移行します。

正常な応答であれば、その後でデータをJSONとして解析し、取得したデータを表示しています。

●TypeScriptでのfetchの使い方

TypeScriptでのfetchの使い方を理解するためには、JavaScriptでのfetch関数の基本的な使い方を知っていることが前提となります。

しかし、TypeScriptでのfetchは、型の安全性を保ちながら非同期通信を行う点で、JavaScriptとはやや異なる部分が存在します。

ここでは、TypeScript特有の型付けやインターフェイスの活用方法を中心に、fetchの使い方を詳しく解説します。

○サンプルコード1:基本的なAPI呼び出し

下記のコードは、TypeScriptを使用して、外部APIからデータを取得する基本的な例です。

// APIから取得するデータの型を定義
interface ApiResponse {
    userId: number;
    id: number;
    title: string;
    body: string;
}

// APIからデータを取得する関数
async function fetchData(): Promise<ApiResponse[]> {
    const response = await fetch('https://jsonplaceholder.typicode.com/posts');
    const data: ApiResponse[] = await response.json();
    return data;
}

// データ取得を実行
fetchData().then(data => {
    console.log(data);
});

このコードでは、まず外部APIから取得するデータの型をApiResponseとして定義しています。

次に、非同期関数fetchDataを定義して、APIからデータを取得し、そのデータをApiResponse[]として型付けしています。

最後に、fetchData関数を呼び出して、取得したデータをコンソールに出力しています。

このコードを実行すると、APIから取得した投稿データがコンソールに出力されます。

このとき、APIから取得したデータがApiResponseの形式と合致しない場合、TypeScriptのコンパイル時に型エラーが発生する点がポイントです。

このように、TypeScriptを活用することで、APIの応答形式の変更などの予期せぬエラーを事前に検知することが可能となります。

○サンプルコード2:エラーハンドリングの追加

TypeScriptを使用して、fetch関数を利用する際には、エラーハンドリングが非常に重要です。

ネットワークの問題やAPIのエラーなど、様々な要因によってエラーが発生する可能性があるため、しっかりとしたエラーハンドリングを実装しておくことが重要です。

ここでは、基本的なAPIの呼び出しにエラーハンドリングを追加する方法について詳しく解説していきます。

まず、次のサンプルコードをご覧ください。

async function fetchData(url: string): Promise<any> {
    try {
        const response = await fetch(url);

        // レスポンスが正常でない場合はエラーを投げる
        if (!response.ok) {
            throw new Error(`HTTP error! Status: ${response.status}`);
        }

        return await response.json();
    } catch (error) {
        console.error('APIの取得に失敗:', error);
        throw error;  // エラーを上位の呼び出し元に伝達
    }
}

fetchData('https://api.example.com/data');

このコードでは、fetchData関数を使ってURLを指定してAPIを呼び出します。

try-catchブロックを使用して、エラーが発生した場合の処理を実装しています。

まず、fetch関数でAPIを呼び出し、そのレスポンスが正常であるかどうかをチェックしています。

レスポンスが正常でない場合(例えば、404 Not Foundや500 Internal Server Errorなど)、Errorオブジェクトを生成して、エラーメッセージと共に投げています。

次に、catchブロック内でエラーをキャッチし、そのエラー情報をコンソールに出力しています。

さらに、エラーを上位の呼び出し元に伝達するために、throw errorを使用しています。

このコードを実行すると、APIの呼び出しが成功した場合はJSONデータを取得することができます。

しかし、何らかの理由でエラーが発生した場合には、エラーメッセージがコンソールに表示され、上位の呼び出し元にエラーが伝達されます。

具体的なエラーが発生した場合、例えばAPIのURLが間違っていた場合やAPIサーバーがダウンしている場合など、コンソールには「APIの取得に失敗」というメッセージと共に、具体的なエラー情報が出力されます。

これにより、開発者はエラーの原因を迅速に特定し、対応することができるようになります。

○サンプルコード3:非同期関数としてのfetch

fetchはブラウザに組み込まれた関数であり、外部リソースやAPIにリクエストを送るためのものです。

JavaScriptのコードにおいて、非同期処理として動作するため、TypeScriptを用いる場合も、適切に型付けを行いながら、非同期処理を考慮する必要があります。

以下のコードは、TypeScriptでfetchを非同期関数として実装したものです。

APIからデータを取得するシンプルな例となっています。

// APIのURL
const apiUrl: string = 'https://api.example.com/data';

// レスポンスデータの型定義
interface ApiResponse {
  id: number;
  name: string;
}

// 非同期関数としてのfetchの使用
async function fetchData(): Promise<ApiResponse> {
  const response = await fetch(apiUrl);
  if (!response.ok) {
    throw new Error('ネットワークエラーが発生しました');
  }
  const data: ApiResponse = await response.json();
  return data;
}

// 実行
fetchData().then(data => {
  console.log(data);
}).catch(error => {
  console.error('エラー:', error);
});

このコードでは、まずAPIのURLを定義しています。

その後、APIから返ってくるレスポンスデータの型を定義しています。

この型定義は、TypeScriptの強力な機能の一つで、返ってくるデータの構造を明示的に指定することができます。

非同期関数fetchDataの中で、fetch関数を使用してAPIからデータを取得しています。

このときawaitを使って非同期処理の完了を待っています。

レスポンスが正常でない場合(response.okがfalseの場合)にはエラーを投げています。

その後、レスポンスの本文をJSONとして解析し、型ApiResponseを持つデータとして返しています。

最後の部分では、上記の非同期関数を呼び出し、結果をconsoleに出力するか、エラーがあればエラー内容を出力しています。

このコードを実行すると、指定したAPIからデータを取得し、そのデータがApiResponseという型の形式でconsoleに出力されます。

しかし、ネットワークの問題やAPIの問題などでデータの取得に失敗した場合、エラー情報がconsoleに出力されることになります。

『TypeScriptとfetchの使い方:完全ガイドのたった12のステップ』

●TypeScriptでのfetchの応用例

TypeScriptでのfetch関数を使用する際、基本的な使い方だけでなく、さまざまな応用例を知っておくことで、より多様なシチュエーションに対応することができます。

今回は、POSTリクエストの送信について詳しく解説します。

○サンプルコード4:POSTリクエストの送信

Web APIにデータを送信する際、多くの場合POSTリクエストを利用します。

TypeScriptを用いてfetch関数を使用し、POSTリクエストを送信するサンプルコードを紹介します。

// TypeScriptでのfetchを使用したPOSTリクエストの例

const postData = async (url: string, data: Object) => {
    try {
        // fetch関数でのオプション設定
        const response = await fetch(url, {
            method: 'POST', // HTTPメソッドとしてPOSTを指定
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(data) // 送信データをJSON形式に変換
        });

        // レスポンスをJSON形式で取得
        const result = await response.json();
        return result;

    } catch (error) {
        console.error('エラーが発生しました:', error);
        throw error;
    }
};

// 使用例
const sampleData = {
    name: "Taro",
    age: 25
};

postData("https://example.com/api/data", sampleData);

このコードでは、非同期関数postDataを定義しています。

関数内で、fetch関数を使用してPOSTリクエストを送信しており、送信するデータはJSON形式に変換されています。

また、エラーが発生した場合には、エラーメッセージをコンソールに出力します。

このコードを実行すると、指定されたURL(https://example.com/api/data)に、sampleDataとして定義されたデータがPOSTリクエストとして送信されます。

正常に送信が完了した場合、APIのレスポンスがJSON形式で返され、その内容が関数の戻り値として返ります。

一方、通信エラーやサーバー側のエラーが発生した場合には、エラーメッセージがコンソールに出力されます。

○サンプルコード5:JSONデータの取得と型付け

TypeScriptは静的型付けが特徴の言語であり、これにより多くのエラーをコードの実行前に検出することができます。

fetch関数を用いてJSONデータを取得する際、TypeScriptの型システムを利用することで、取得するデータの構造を明示的に指定することができます。

これにより、データの形式に関する間違いを早期に検出することが可能となります。

JSON形式のデータを取得し、そのデータをTypeScriptの型で定義する一例を紹介します。

// 取得するデータの型を定義
type UserData = {
    id: number;
    name: string;
    email: string;
};

// fetch関数を使ってデータを取得
async function fetchUserData(url: string): Promise<UserData> {
    const response = await fetch(url);
    if (!response.ok) {
        throw new Error('ネットワークのエラーまたはデータの取得に失敗しました。');
    }
    const data: UserData = await response.json();
    return data;
}

// 実行例
const url = 'https://api.example.com/user';
fetchUserData(url)
    .then(data => {
        console.log(`ユーザーの名前: ${data.name}`);
        console.log(`ユーザーのメール: ${data.email}`);
    })
    .catch(error => {
        console.error(`エラー: ${error.message}`);
    });

このコードでは、まずUserDataという型を定義しています。

この型は、取得するデータの形式を表しています。

次に、fetchUserDataという非同期関数を定義しています。

この関数は、指定されたURLからデータを取得し、そのデータをUserDataの型として返すものです。

このコードを実行すると、指定したURLからデータを取得し、そのデータのnameemailをコンソールに出力します。

もしデータの取得に失敗した場合、エラーメッセージがコンソールに出力されます。

また、取得するデータの中で特定のフィールドだけを取り出すといったことも可能です。

例えば、上記のUserDataの中でidだけを取り出したい場合、次のようなコードになります。

type UserID = {
    id: number;
};

async function fetchUserID(url: string): Promise<UserID> {
    const response = await fetch(url);
    if (!response.ok) {
        throw new Error('データの取得に失敗しました。');
    }
    const data: UserID = await response.json();
    return data;
}

const url = 'https://api.example.com/user';
fetchUserID(url)
    .then(data => {
        console.log(`ユーザーのID: ${data.id}`);
    })
    .catch(error => {
        console.error(`エラー: ${error.message}`);
    });

上記のコードでは、UserIDという型を新たに定義し、fetchUserID関数を使用して、idだけを取り出しています。

これにより、必要なデータだけを効率的に取得することができます。

○サンプルコード6:外部APIとの連携

外部APIとの連携は、現代のウェブアプリケーションやモバイルアプリケーションの開発において必要不可欠です。

TypeScriptとfetchを組み合わせることで、型の安全性を持ったデータの取得や送信が可能となります。

ここでは、外部APIとの連携方法について、サンプルコードを交えながら解説します。

まず、次のコードはTypeScriptを使用して外部APIからデータを取得する基本的な例を表しています。

// 外部APIからのデータを型付け
interface ApiResponse {
  userId: number;
  id: number;
  title: string;
  completed: boolean;
}

// fetchを使用してデータを取得する関数
async function fetchData(): Promise<ApiResponse[]> {
  const response = await fetch('https://jsonplaceholder.typicode.com/todos/');
  const data: ApiResponse[] = await response.json();
  return data;
}

// 上記の関数を実行
fetchData().then(data => console.log(data));

このコードでは、まず外部APIから取得されるデータの構造に基づいてApiResponseというinterfaceを定義しています。

次に、非同期関数fetchDataを定義し、その中でfetchを使用して外部APIからデータを取得しています。

取得したデータは、定義したApiResponse型の配列として扱われ、その後コンソールに表示されます。

このコードを実行すると、https://jsonplaceholder.typicode.com/todos/ から取得したデータの一覧がコンソールに表示されます。

各データはApiResponseの型定義に従っており、TypeScriptの型チェック機能によってデータの整合性が保たれます。

また、APIから取得したデータをさらに加工やフィルタリングしたい場合は、取得後のデータに対して必要な処理を追加することができます。

例えば、completedがtrueのデータだけを取得する場合は、以下のようにfilter関数を使用してデータを絞り込むことができます。

fetchData()
  .then(data => data.filter(item => item.completed))
  .then(filteredData => console.log(filteredData));

このコードを実行すると、completedがtrueのデータだけがコンソールに表示されます。

●fetchの注意点とその対処法

Webアプリケーションを開発する際、APIや外部サーバーからのデータ取得は一般的なタスクとなっています。

このとき、JavaScript、特にTypeScriptでよく利用されるのがfetch関数です。しかし、このfetch関数を利用する際にはいくつかの注意点があります。

それでは、これらの注意点とその対処法を詳細に解説します。

○クロスオリジンの問題

多くのWeb開発者が直面する一つの大きな問題は、クロスオリジンのリクエスト、つまり異なるオリジンからのデータアクセスに関連する制限です。

ブラウザはセキュリティの観点から、異なるオリジンからのリソースに対するリクエストを制限しています。

これは、サードパーティのウェブサイトがユーザーのデータを不正に取得することを防ぐためのものです。

しかし、正当な理由でクロスオリジンのリクエストを行いたい場合もあります。

この場合、次のような方法で対処することができます。

□サーバー側でCORSを有効にする

サーバー側でCORS(Cross-Origin Resource Sharing)を有効にすることで、指定したオリジンからのリクエストを許可することができます。

// サーバーサイドの設定例(Express.jsを使用する場合)
import express from 'express';
const app = express();

app.use((req, res, next) => {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});

このコードでは、Express.jsのミドルウェアを使用して、全てのオリジンからのリクエストを許可しています。

しかし、実際の運用環境では、必要なオリジンだけを許可するように設定すべきです。

□プロキシサーバーを使用する

プロキシサーバーを利用して、クロスオリジンのリクエストを回避する方法もあります。

これは、リクエストを直接APIサーバーに送るのではなく、プロキシサーバーを経由してリクエストを転送する方法です。

○エラーレスポンスのハンドリング

fetch関数を使用すると、ネットワークエラーが発生した場合を除き、どんなレスポンスステータスであってもPromiseがresolveされる点に注意が必要です。

これは、404や500などのエラーステータスであっても、エラーとしては扱われません。

このため、明示的にレスポンスステータスを確認し、エラーハンドリングを行う必要があります。

下記のサンプルコードは、fetch関数のレスポンスを確認し、エラーステータスの場合はエラーをスローしています。

fetch('https://api.example.com/data')
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! Status: ${response.status}`);
        }
        return response.json();
    })
    .then(data => {
        // データの利用
        console.log(data);
    })
    .catch(error => {
        // エラーハンドリング
        console.error('Fetch error: ', error.message);
    });

このコードを実行すると、HTTPエラーステータスが返された場合、エラーメッセージがコンソールに表示されます。

具体的には、例えばAPIサーバーが404 Not Foundのレスポンスを返すと、”Fetch error: HTTP error! Status: 404″というメッセージが表示されます。

●カスタマイズ方法

Webアプリケーションの開発を進める中で、fetchを使って外部サービスやAPIとの通信を行うケースは非常に多いです。

特に、TypeScriptを利用する場合は、型の安全性を活かしながらfetchをカスタマイズする方法が求められることが多くあります。

ここでは、TypeScriptでのfetch関数をカスタマイズする際の方法として、カスタムヘッダーの追加に焦点を当て、その実装方法と実行結果を詳細に解説します。

○サンプルコード7:カスタムヘッダーの追加

外部のAPIやサーバーとの通信を行う際に、特定のヘッダー情報を付与してリクエストを送りたいケースが多々あります。

例として、認証トークンをヘッダーに含めてリクエストを送る場面などが考えられます。

このコードでは、カスタムヘッダーを追加してAPIにリクエストを送る方法を表しています。

// TypeScriptのfetchを使ってカスタムヘッダーを追加するサンプル
const fetchDataWithCustomHeader = async (url: string) => {
  const headers = new Headers({
    'Authorization': 'Bearer あなたのトークン',
    'Custom-Header': 'カスタムヘッダーの値'
  });

  const response = await fetch(url, {
    method: 'GET',
    headers: headers
  });

  if (!response.ok) {
    throw new Error(`HTTP error! Status: ${response.status}`);
  }
  return await response.json();
};

// 実行
const url = "https://api.example.com/data";
fetchDataWithCustomHeader(url)
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error("エラーが発生:", error);
  });

このコードを実行すると、指定したURLに対してカスタムヘッダーを含むリクエストが送信されます。

具体的には、「Authorization」というヘッダーに「Bearer あなたのトークン」という値が、さらに「Custom-Header」というヘッダーに「カスタムヘッダーの値」という値がそれぞれ設定されます。

ヘッダー情報の設定には、JavaScriptのFetch APIに含まれるHeadersオブジェクトを使用しています。

このオブジェクトにヘッダーのキーと値を設定することで、fetch関数の第二引数のheadersプロパティに渡すことができます。

もしリクエストが正常に完了した場合、レスポンスの内容はconsole.logを使用してコンソールに表示されます。

一方、何らかのエラーが発生した場合、エラーメッセージがコンソールに表示されます。

○サンプルコード8:タイムアウトの設定

TypeScriptとfetchを使ってAPIを呼び出す際、ネットワークの遅延やサーバーの障害によって、リクエストが長時間応答されない場合があります。

このような状況を避けるためには、リクエストにタイムアウトを設定するのが一般的です。

タイムアウトを設定することで、指定した時間内に応答が返ってこない場合は、リクエストを強制的に中断することができます。

次に、TypeScriptとfetchを使ったタイムアウトの設定方法に関するサンプルコードを見てみましょう。

// APIのエンドポイントを指定
const endpoint = "https://api.example.com/data";

// タイムアウト時間を指定(ミリ秒)
const TIMEOUT = 5000;

const fetchDataWithTimeout = async () => {
    // タイムアウトを検知するPromiseを作成
    const timeoutPromise = new Promise<void>((_, reject) => {
        setTimeout(() => {
            reject(new Error("リクエストがタイムアウトしました。"));
        }, TIMEOUT);
    });

    try {
        // fetchとタイムアウトのPromiseを同時に実行し、先に完了したものを採用
        const response = await Promise.race([fetch(endpoint), timeoutPromise]);

        // レスポンスをJSONとして解析
        const data = await response.json();

        console.log(data);
    } catch (error) {
        console.error(error.message);
    }
}

fetchDataWithTimeout();

このコードでは、Promise.raceを使って、fetchとタイムアウトを監視するPromiseを同時に実行しています。

Promise.raceは、与えられたPromiseの中で最初に完了したものの結果を返します。

このため、指定したタイムアウト時間内にAPIからの応答がなければ、タイムアウトのPromiseがrejectされ、エラーメッセージが出力されます。

このコードを実行すると、タイムアウト時間内にAPIからの応答があればそのデータがconsoleに出力されます。

応答がタイムアウト時間内に返ってこなければ、エラーメッセージ “リクエストがタイムアウトしました。” が出力されます。

●fetchをより深く理解するための参考情報

fetchは、WebブラウザのAPIの一部であり、HTTPリクエストを送信し、サーバからのレスポンスを取得するための関数です。

この関数はPromiseを返すため、非同期処理に関連する概念を知っておくと、fetchの動作をより深く理解することができます。

ここでは、Promiseとasync/awaitに関する基本的な情報を提供します。

○Promiseとは?

Promiseは、JavaScriptおよびTypeScriptで非同期処理を行うためのオブジェクトの一つです。

非同期処理は、例えばサーバーへのリクエストのように、結果がすぐに得られない操作を指します。

Promiseはそのような操作の結果を表すオブジェクトであり、処理が完了した際の結果やエラーを取得することができます。

// このコードでは、新しいPromiseオブジェクトを作成しています。
const promise = new Promise<string>((resolve, reject) => {
    setTimeout(() => {
        // 3秒後に、Promiseが完了(resolve)される
        resolve("成功!");
    }, 3000);
});

// このコードを実行すると、3秒後に"成功!"という文字列が出力されます。
promise.then((message) => {
    console.log(message);
});

このコードでは、新しいPromiseオブジェクトを作成しています。

setTimeout関数を使用して、3秒後にPromiseが完了(resolve)されるようにしています。

そして、promise.then()を使用して、Promiseが完了したときの処理を定義しています。

このコードを実行すると、3秒後にコンソールに”成功!”という文字列が出力されることを期待しています。

○async/awaitの利用方法

async/awaitは、Promiseベースの非同期処理をさらに簡単に書くための構文です。

asyncキーワードを使用して関数を定義すると、その関数内でawaitキーワードを使用して、Promiseが完了するのを待つことができます。

// このコードでは、Promiseを返す関数を定義しています。
function fetchMessage(): Promise<string> {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve("メッセージを取得しました");
        }, 2000);
    });
}

// このコードでは、非同期関数として、上記のfetchMessage関数を呼び出しています。
async function showMessage() {
    const message = await fetchMessage();
    console.log(message);
}

// このコードを実行すると、2秒後に"メッセージを取得しました"という文字列が出力されます。
showMessage();

このコードでは、まずPromiseを返す関数fetchMessageを定義しています。

その後、asyncキーワードを使用して非同期関数showMessageを定義し、その中でawaitキーワードを使用してfetchMessage関数のPromiseが完了するのを待っています。

このコードを実行すると、2秒後にコンソールに”メッセージを取得しました”という文字列が出力されることを期待しています。

“TypeScriptとfetchの使い方:完全ガイドのたった12のステップ”をお読みいただき、ありがとうございます。この記事を通じて、TypeScriptでのfetch関数の使い方や注意点、カスタマイズ方法を完璧にマスターすることができるでしょう。

まとめ

TypeScriptとは、JavaScriptのスーパーセットとして知られる静的型付け言語であり、大規模なプロジェクトや型安全を求める場面での利用が推奨されています。

一方、fetchはブラウザの標準機能として、外部のリソースやAPIと通信するための関数です。

この記事では、TypeScriptとfetchを組み合わせる方法を細かく解説してきました。

この記事を通じて、TypeScriptとfetchの使い方をしっかりと把握できたことを願っています。

さらなる学びや実践を通じて、スキルの向上を図ってください。