diff --git a/.changeset/wide-pianos-exist.md b/.changeset/wide-pianos-exist.md new file mode 100644 index 000000000..5070a4d14 --- /dev/null +++ b/.changeset/wide-pianos-exist.md @@ -0,0 +1,5 @@ +--- +"openapi-typescript-helpers": patch +--- + +Preserve tuple types in Readable and Writable by using mapped type instead of (infer E)[] pattern diff --git a/packages/openapi-typescript-helpers/src/index.ts b/packages/openapi-typescript-helpers/src/index.ts index 391e0a694..fb04180f6 100644 --- a/packages/openapi-typescript-helpers/src/index.ts +++ b/packages/openapi-typescript-helpers/src/index.ts @@ -221,8 +221,8 @@ export type Readable = ? never : T extends $Read ? Readable - : T extends (infer E)[] - ? Readable[] + : T extends readonly any[] + ? { [K in keyof T]: Readable } : T extends object ? { [K in keyof T as NonNullable extends $Write ? never : K]: Readable } : T; @@ -238,8 +238,8 @@ export type Writable = ? never : T extends $Write ? Writable - : T extends (infer E)[] - ? Writable[] + : T extends readonly any[] + ? { [K in keyof T]: Writable } : T extends object ? { [K in keyof T as NonNullable extends $Read ? never : K]: Writable } & { [K in keyof T as NonNullable extends $Read ? K : never]?: never;