acacode / acacode/swagger-typescript-api

`not: {}` generates `any` instead of `never`

Open
#1,821 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
4.1k
Forks
436
PR merge metrics
No merged PRs in 30d

Description

## Description

An empty JSON Schema accepts every possible value, so negating it with `not: {}` produces an impossible schema. The corresponding TypeScript type is `never`.

`swagger-typescript-api` currently generates `any` for this schema.

Version: 13.12.6.

## Example
```yaml
openapi: 3.0.3
info:
title: not schema reproduction
version: 1.0.0

paths: {}

components:
schemas:
Identifier:
oneOf:
- type: object
additionalProperties: false
required:
- internalId
properties:
internalId:
type: string
externalId:
not: {}

- type: object
additionalProperties: false
required:
- externalId
properties:
internalId:
not: {}
externalId:
type: string
```

### Actual Output

```ts
type Identifier =
| {
internalId: string
externalId?: any
}
| {
internalId?: any
externalId: string
}
```

### Expected Output

```ts
type Identifier =
| {
internalId: string
externalId?: never
}
| {
internalId?: never
externalId: string
}
```

### Source Problem

https://github.com/acacode/swagger-typescript-api/blob/v13.12.6/src/schema-parser/complex-schema-parsers/not.ts
The relevant parser currently returns `any` for every `not` schema:

```ts
export class NotSchemaParser extends MonoSchemaParser {
override parse() {
return this.config.Ts.Keyword.Any
}
}
```

#1798 addressed the generation crash for object-valued `not` schemas. The crash is fixed, but the generated type for `not: {}` remains `any`.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.