Open
Description
openapi-typescript version
7.8.0
Node.js version
22.14.0
OS + version
macOS 15.4.1
Description
Generating typescript types from parameters with default
defined results in a type marked as optional with ?
, while it should be generated without marking it as optional.
For example given such parameter:
parameters:
- name: status
in: query
description: Status values that need to be considered for filter
explode: true
schema:
type: string
default: available
enum:
- available
- pending
- sold
We get such type
parameters: {
query?: {
/** @description Status values that need to be considered for filter */
status?: 'available' | 'pending' | 'sold';
};
...
};
Notice status?
while it should've been status
since it will always contain at least the default 'available'
.
Including --default-non-nullable
flag doesn't fix it.
openapi-typescript/packages/openapi-typescript/src/transform/schema-object.ts
Lines 478 to 484 in d309753
Reproduction
Full YAML example
openapi: 3.0.4
info:
title: Swagger Petstore - OpenAPI 3.0
description: |-
This is a sample Pet Store Server based on the OpenAPI 3.0 specification. You can find out more about
Swagger at [https://swagger.io](https://swagger.io). In the third iteration of the pet store, we've switched to the design first approach!
You can now help us improve the API whether it's by making changes to the definition itself or to the code.
That way, with time, we can improve the API in general, and expose some of the new features in OAS3.
Some useful links:
- [The Pet Store repository](https://github.com/swagger-api/swagger-petstore)
- [The source API definition for the Pet Store](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml)
termsOfService: https://swagger.io/terms/
contact:
email: apiteam@swagger.io
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
version: 1.0.12
servers:
- url: https://petstore3.swagger.io/api/v3
tags:
- name: pet
description: Everything about your Pets
externalDocs:
description: Find out more
url: https://swagger.io
- name: store
description: Access to Petstore orders
externalDocs:
description: Find out more about our store
url: https://swagger.io
- name: user
description: Operations about user
externalDocs:
description: Find out more about Swagger
url: https://swagger.io
paths:
/pet/findByStatus:
get:
tags:
- pet
summary: Finds Pets by status.
description: Multiple status values can be provided with comma separated strings.
operationId: findPetsByStatus
parameters:
- name: status
in: query
description: Status values that need to be considered for filter
explode: true
schema:
type: string
default: available
enum:
- available
- pending
- sold
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Pet'
application/xml:
schema:
type: array
items:
$ref: '#/components/schemas/Pet'
'400':
description: Invalid status value
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- petstore_auth:
- write:pets
- read:pets
components:
schemas:
Category:
type: object
properties:
id:
type: integer
format: int64
example: 1
name:
type: string
example: Dogs
xml:
name: category
Tag:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
xml:
name: tag
Pet:
required:
- name
- photoUrls
type: object
properties:
id:
type: integer
format: int64
example: 10
name:
type: string
example: doggie
category:
$ref: '#/components/schemas/Category'
photoUrls:
type: array
xml:
wrapped: true
items:
type: string
xml:
name: photoUrl
tags:
type: array
xml:
wrapped: true
items:
$ref: '#/components/schemas/Tag'
status:
type: string
description: pet status in the store
enum:
- available
- pending
- sold
xml:
name: pet
Error:
type: object
properties:
code:
type: string
message:
type: string
required:
- code
- message
securitySchemes:
petstore_auth:
type: oauth2
flows:
implicit:
authorizationUrl: https://petstore3.swagger.io/oauth/authorize
scopes:
write:pets: modify pets in your account
read:pets: read your pets
api_key:
type: apiKey
name: api_key
in: header
Expected result
parameters: {
query?: {
/** @description Status values that need to be considered for filter */
status: 'available' | 'pending' | 'sold';
};
...
};
Required
- My OpenAPI schema is valid and passes the Redocly validator (
npx @redocly/cli@latest lint
)
Extra
- I’m willing to open a PR (see CONTRIBUTING.md)