Skip to content

Commit ed65518

Browse files
committed
fix(enum): handle nullable enum when useEnums=true
1 parent 9ff319c commit ed65518

File tree

3 files changed

+36
-5
lines changed

3 files changed

+36
-5
lines changed

plugins/typescript/src/core/schemaToTypeAliasDeclaration.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,10 @@ export const getType = (
173173

174174
if (schema.enum) {
175175
if (isNodeEnum) {
176-
return f.createTypeReferenceNode(f.createIdentifier(pascal(name || "")));
176+
return f.createUnionTypeNode([
177+
f.createTypeReferenceNode(f.createIdentifier(pascal(name || ""))),
178+
...(schema.nullable ? [f.createLiteralTypeNode(f.createNull())] : []),
179+
]);
177180
}
178181

179182
const unionTypes = f.createUnionTypeNode([

plugins/typescript/src/fixtures/petstore.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -364,8 +364,13 @@ export const petstore: OpenAPIObject = {
364364
type: "string",
365365
enum: ["labrador", "carlin", "beagle"],
366366
},
367+
temperament: {
368+
type: "string",
369+
enum: ["calm", "playful", "aggressive", "shy"],
370+
nullable: true,
371+
},
367372
},
368-
required: ["type", "breed"],
373+
required: ["type", "breed", "temperament"],
369374
},
370375
Dog: {
371376
description: "A dog, wooof.",
@@ -378,8 +383,13 @@ export const petstore: OpenAPIObject = {
378383
type: "string",
379384
enum: ["saimois", "bengal", "british shorthair"],
380385
},
386+
temperament: {
387+
type: "string",
388+
enum: ["calm", "playful", "aggressive", "shy"],
389+
nullable: true,
390+
},
381391
},
382-
required: ["type", "breed"],
392+
required: ["type", "breed", "temperament"],
383393
},
384394
Error: {
385395
description: "An error :(",

plugins/typescript/src/generators/generateSchemaTypes.test.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ describe("generateSchemaTypes", () => {
175175
export type Cat = {
176176
type: string;
177177
breed: "labrador" | "carlin" | "beagle";
178+
temperament: "calm" | "playful" | "aggressive" | "shy" | null;
178179
};
179180
180181
/**
@@ -183,6 +184,7 @@ describe("generateSchemaTypes", () => {
183184
export type Dog = {
184185
type: string;
185186
breed: "saimois" | "bengal" | "british shorthair";
187+
temperament: "calm" | "playful" | "aggressive" | "shy" | null;
186188
};
187189
188190
/**
@@ -233,13 +235,27 @@ describe("generateSchemaTypes", () => {
233235
Carlin = "carlin",
234236
Beagle = "beagle",
235237
}
236-
238+
239+
export enum CatTemperament {
240+
Calm = "calm",
241+
Playful = "playful",
242+
Aggressive = "aggressive",
243+
Shy = "shy",
244+
}
245+
237246
export enum DogBreed {
238247
Saimois = "saimois",
239248
Bengal = "bengal",
240249
BritishShorthair = "british shorthair",
241250
}
242-
251+
252+
export enum DogTemperament {
253+
Calm = "calm",
254+
Playful = "playful",
255+
Aggressive = "aggressive",
256+
Shy = "shy",
257+
}
258+
243259
/**
244260
* A new pet.
245261
*/
@@ -275,6 +291,7 @@ describe("generateSchemaTypes", () => {
275291
export type Cat = {
276292
type: string;
277293
breed: CatBreed;
294+
temperament: CatTemperament | null;
278295
};
279296
280297
/**
@@ -283,6 +300,7 @@ describe("generateSchemaTypes", () => {
283300
export type Dog = {
284301
type: string;
285302
breed: DogBreed;
303+
temperament: DogTemperament | null;
286304
};
287305
288306
/**

0 commit comments

Comments
 (0)