diff --git a/packages/openapi-typescript/src/transform/schema-object.ts b/packages/openapi-typescript/src/transform/schema-object.ts index baa143933..7219664df 100644 --- a/packages/openapi-typescript/src/transform/schema-object.ts +++ b/packages/openapi-typescript/src/transform/schema-object.ts @@ -322,7 +322,7 @@ function transformSchemaObjectCore(schemaObject: SchemaObject, options: Transfor } // standard array type else if (schemaObject.items) { - if ("type" in schemaObject.items && schemaObject.items.type === "array") { + if (hasKey(schemaObject.items, "type") && schemaObject.items.type === "array") { itemType = ts.factory.createArrayTypeNode(transformSchemaObject(schemaObject.items, options)); } else { itemType = transformSchemaObject(schemaObject.items, options); @@ -579,3 +579,13 @@ function transformSchemaObjectCore(schemaObject: SchemaObject, options: Transfor return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined; } + +/** + * Check if an object has a key + * @param possibleObject - The object to check + * @param key - The key to check for + * @returns True if the object has the key, false otherwise + */ +function hasKey(possibleObject: unknown, key: K): possibleObject is { [key in K]: unknown } { + return typeof possibleObject === "object" && possibleObject !== null && key in possibleObject; +} diff --git a/packages/openapi-typescript/test/transform/schema-object/array.test.ts b/packages/openapi-typescript/test/transform/schema-object/array.test.ts index 37d468766..fe3e53358 100644 --- a/packages/openapi-typescript/test/transform/schema-object/array.test.ts +++ b/packages/openapi-typescript/test/transform/schema-object/array.test.ts @@ -18,6 +18,14 @@ describe("transformSchemaObject > array", () => { // options: DEFAULT_OPTIONS, }, ], + // Prevents: "TypeError: Cannot use 'in' operator to search for 'type' in true" + [ + "boolean items", + { + given: { type: "array", items: true }, + want: "unknown[]", + }, + ], [ "tuple > tuple items", {