diff --git a/.changeset/defs-optional-property.md b/.changeset/defs-optional-property.md new file mode 100644 index 000000000..461907c42 --- /dev/null +++ b/.changeset/defs-optional-property.md @@ -0,0 +1,5 @@ +--- +"openapi-typescript": patch +--- + +Emit the generated `$defs` container as an optional property so schemas that declare `$defs` are no longer required to provide it when used as input types. `$refs` that index into `$defs` continue to resolve. diff --git a/packages/openapi-typescript/src/transform/schema-object.ts b/packages/openapi-typescript/src/transform/schema-object.ts index caab5e10f..58b92ef1e 100644 --- a/packages/openapi-typescript/src/transform/schema-object.ts +++ b/packages/openapi-typescript/src/transform/schema-object.ts @@ -655,7 +655,7 @@ function transformSchemaObjectCore(schemaObject: SchemaObject, options: Transfor ts.factory.createPropertySignature( /* modifiers */ undefined, /* name */ tsPropertyIndex("$defs"), - /* questionToken */ undefined, + /* questionToken */ QUESTION_TOKEN, /* type */ ts.factory.createTypeLiteralNode(defKeys), ), ); diff --git a/packages/openapi-typescript/test/index.test.ts b/packages/openapi-typescript/test/index.test.ts index ea8f55426..04a62c5ab 100644 --- a/packages/openapi-typescript/test/index.test.ts +++ b/packages/openapi-typescript/test/index.test.ts @@ -590,18 +590,18 @@ export interface components { rootDef?: $defs["StringType"]; nestedDef?: components["schemas"]["OtherObject"]["$defs"]["nestedDef"]; remoteDef?: components["schemas"]["remoteDef"]; - $defs: { + $defs?: { hasDefs: boolean; }; }; ArrayOfDefs: $defs["StringType"][]; OtherObject: { - $defs: { + $defs?: { nestedDef: boolean; }; }; RemoteDefs: { - $defs: { + $defs?: { remoteDef: components["schemas"]["remoteDef"]; }; }; diff --git a/packages/openapi-typescript/test/transform/schema-object/object.test.ts b/packages/openapi-typescript/test/transform/schema-object/object.test.ts index 0ef611a95..72051b1d2 100644 --- a/packages/openapi-typescript/test/transform/schema-object/object.test.ts +++ b/packages/openapi-typescript/test/transform/schema-object/object.test.ts @@ -340,7 +340,7 @@ describe("transformSchemaObject > object", () => { }, want: `{ foo?: string; - $defs: { + $defs?: { /** @enum {string} */ defEnum: "one" | "two" | "three"; }; @@ -612,7 +612,7 @@ describe("transformSchemaObject > object", () => { }, want: `{ foo?: string; - $defs: { + $defs?: { readOnlyDef: $Read; writeOnlyDef: $Write; normalDef: boolean;