diff --git a/packages/openapi-typescript/src/transform/schema-object.ts b/packages/openapi-typescript/src/transform/schema-object.ts index f567eb0cb..c1d59a23e 100644 --- a/packages/openapi-typescript/src/transform/schema-object.ts +++ b/packages/openapi-typescript/src/transform/schema-object.ts @@ -302,7 +302,16 @@ function transformSchemaObjectCore( } // standard array type else if (schemaObject.items) { - itemType = transformSchemaObject(schemaObject.items, options); + if ( + "type" in schemaObject.items && + schemaObject.items.type === "array" + ) { + itemType = ts.factory.createArrayTypeNode( + transformSchemaObject(schemaObject.items, options), + ); + } else { + itemType = transformSchemaObject(schemaObject.items, options); + } } const min: number = @@ -350,9 +359,9 @@ function transformSchemaObjectCore( } } - return ts.isTupleTypeNode(itemType) + return ts.isTupleTypeNode(itemType) || ts.isArrayTypeNode(itemType) ? itemType - : ts.factory.createArrayTypeNode(itemType); // wrap itemType in array type, but only if not a tuple already + : ts.factory.createArrayTypeNode(itemType); // wrap itemType in array type, but only if not a tuple or array already } // polymorphic, or 3.1 nullable 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 cd404cfdd..8e34ed7d8 100644 --- a/packages/openapi-typescript/test/transform/schema-object/object.test.ts +++ b/packages/openapi-typescript/test/transform/schema-object/object.test.ts @@ -337,6 +337,42 @@ describe("transformSchemaObject > object", () => { }, }, ], + [ + "options > two-dimensional array", + { + given: { + type: "object", + properties: { + array: { + type: "array", + items: { + items: [ + { + type: "string", + }, + { + type: "boolean", + }, + ], + type: "array", + maxItems: 2, + minItems: 2, + }, + }, + }, + }, + want: `{ + array?: [ + string, + boolean + ][]; +}`, + options: { + ...DEFAULT_OPTIONS, + ctx: { ...DEFAULT_OPTIONS.ctx }, + }, + }, + ], ]; for (const [