acacode / acacode/swagger-typescript-api

Nullable components with required values in complex schema types

オープン
#497 コメント 1 件 リアクション 3 件 担当者 0 名 GitHub で見る
主要言語
TypeScript
スター
4.1k
フォーク
436
PR マージ指標
30日以内にマージされた PR はありません

説明

Release 10.0.2 (https://github.com/acacode/swagger-typescript-api/pull/419) added the `UtilRequiredKeys` type that produces invalid generated code when you have a schema with complex schema types (anyOf/allOf/oneOf) that reference required fields of nullable components.

How to trigger in a schema:
* Have a nullable component (`myObject` is the schema below)
* Reference component with complex schema type (`TestObject` in the schema below)
* Mark a nested field as required (`"required": ["name"],` as marked in `TestObject`)

Example schema:

```json
{
"openapi": "3.0.2",
"info": {
"title": "Nullable Refs Example",
"version": "1.0.0"
},
"components": {
"schemas": {
"myObject": {
"type": "object",
"nullable": true,
"properties": {
"name": {
"type": "string"
}
},
"required": ["name"]
},
"TestObject": {
"required": ["name"],
"type": "object",
"allOf": [
{
"$ref": "#/components/schemas/myObject"
}
]
}
}
}
}
```

Generated code from schema (utilising the nullable-3.0 test setup)

```ts
type UtilRequiredKeys = Omit & Required>;

export type MyObject = {
name: string;
} | null;

export type TestObject = UtilRequiredKeys;
```

Which produces the following error

```bash
Type 'string' does not satisfy the constraint 'never'.ts(2344)
```

Potential workarounds:
* Adjust schema to avoid this scenario
* remove usage of `UtilRequiredKeys` via the `configuration.internalTemplateOptions.addUtilRequiredKeysType`
* override `UtilRequiredKeys` definition in template to handle null case via ts NonNullable

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。