3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

axiosのレスポンスにおける日付をDateに自動的に変換する

Posted at

OpenAPI Generator の typescript-axios で吐き出した apiClient がDate型としてアノテーションしてるのに、実際はstringで返ってきて、型の辻褄あわせするためにやった。
但し、空文字の時など考えるとちょっと怪しいので注意。
また、文字列として明示的にISO8601っぽいカラムを入れた場合にも勝手にDateになっちゃうので、その場合にも問題が起きる可能性あり。
そういうケースでは、リクエスト毎にtransformResponseを渡して、その歳にdateとしてパースするカラム名を明示的に渡す、などする事で解決できる可能性が高い。

// eslint-disable-next-line @typescript-eslint/no-explicit-any
function dateParseChallenge(key: string, val: any) {
  if (typeof val === "string") {
    const time = Date.parse(val);
    if (!Number.isNaN(time)) {
      return new Date(time);
    }
  }
  return val;
}

const axiosClient = axios.create({
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  transformResponse: (data: any) => {
    if (typeof data === "string") {
      try {
        return JSON.parse(data, dateParseChallenge);
      } catch (e) {
        // Ignore error
      }
    }
    return data;
  }
});

参考: https://github.com/axios/axios/blob/16b5718954d88fbefe17f0b91101d742b63209c7/lib/defaults.js#L57

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?