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