diff --git a/src/client/types/base.ts b/src/client/types/base.ts index 109351f..cda5482 100644 --- a/src/client/types/base.ts +++ b/src/client/types/base.ts @@ -56,8 +56,17 @@ export type OmitByType = Pick< { [K in keyof T]-?: T[K] extends Type ? never : K }[keyof T] >; +// TS 6.0 infers the exact argument shape (unknown keys included), so T[K] +// checks a value against itself — excess keys pass. U[K] checks against the +// declared shape instead. The phantom-key branch keeps T[K] referenced so +// TypeScript still infers T and Payload still narrows to selected fields. +// https://github.com/microsoft/TypeScript/issues/63515 export type Options = { - [K in keyof T]: K extends keyof U ? T[K] : never; + [K in keyof T]: K extends keyof U + ? K extends "__use_T_so_it_is_inferred__" + ? T[K] + : U[K] + : never; }; export type OrderBy = "ASC" | "DESC";