acacode / acacode/swagger-typescript-api

[Feature request] Discriminated unions on status for error or success responses

Ouverte
#227 3 commentaires 6 réactions 0 personnes assignées Voir sur GitHub
enhancement
Langage dominant
TypeScript
Étoiles
4.1k
Forks
436
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

How would the swagger-typescript-api team feel about having the `status` from the response as a typescript union discriminant where rest of the props would be defined based on its value?

For example, if the `swagger.json` file contains this for a given api call -

```json
"responses": {
"200": {
"description": "Resource is successfully created.",
"schema": { "$ref": "#/definitions/ResourceSuccessResponse" }
},
"400": {
"description": "Create resource request has invalid fields.",
"schema": { "$ref": "#/definitions/ErrorResponse" }
},
"401": {
"description": "Create resource request has invalid user credentials.",
"schema": { "$ref": "#/definitions/ErrorResponse" }
},
"409": {
"description": "Resource name already exists.",
"schema": { "$ref": "#/definitions/ErrorResponse" }
}
}
```

hypothetically the response could be of this format -

```ts
type HttpResponseType = {
status: Status,
data: ResponseData
}

type ResourceCreationResponse =
| HttpResponseType<200, ResourceSuccess>
| HttpResponseType<400, ErrorResponse>
| HttpResponseType<401, ErrorResponse>
| HttpResponseType<409, ErrorResponse>

type ResourceSuccess = {
resource: string
}

type ErrorResponse = {
code: number
message: string
}

declare const a: MyApiCallResponseType;

if(a.status === 200) {
console.log(a.data) // `a.data` is of type ResourceSuccess now
}
```

This could also be an option if not the default.

I would be willing to make a PR for this if this seems like a good idea. It definitely makes the resulting types stronger in my experience with slight flexibility cost.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.