openapi-generator と restful-react で生成される TypeScript のモデルは日付系の型が異なる場合がある
最近、昼の仕事では OpenAPI を軸にした開発をしていて、client 側は React/TypeScript で書くことがあります。
当初は openapi-generator で生成した API Client を利用していたのですが、 restful-react
も OpenAPI から client を生成できると知り試験的に導入し始めています。
同時に検討したのは以下ですが、現状 generator が欲しかったので一旦外しました。(API 見ると便利そうに見える)
Rest Hooks · Delightful data fetching
日付系の OpenAPI 定義の例
OpenAPI-Specification/3.0.1.md at master · OAI/OpenAPI-Specification · GitHub
以下のような感じですね。
"createdAt": { "type": "string", "format": "date-time" }
openapi-generator と restful-react での違い
restful-react の場合
restful-react/import-open-api.ts at master · contiamo/restful-react · GitHub
上記の通り string
として生成されます。
openapi-generator の場合
openapi-generator は TypeScript への生成でも複数の生成方法があります
typescript-fetch
typescript-redux-query
typescript-axios
などstring
として生成- abstract class なので、
typescript-fetch
等のように追加の設定がないものはstring
になる - openapi-generator/AbstractTypeScriptClientCodegen.java at d22bea216c9e2035c551c09fbcabba67c92fdbbf · OpenAPITools/openapi-generator · GitHub
まとめ
調べ始めた当初は restful-react
と openapi-generator
で違いがあるのかぐらいにしか思ってなかったですが、調べてみると openapi-generator
としても生成対象によって異なっていることが分かりました。
ちなみに openapi-generator
が生成するコードは API から受け取った文字列を new Date(createdAtStr)
のように Date
に変換するだけのコードが生成されます。