import type { Args, GenericFn, GenericResolver } from "../HKT"; import type { Eq, IsPropertyKeyLiteral } from "../helpers"; /** * Omit properties from an object. * * Sig: `(k: K, o: O) => object` */ // We do not use the built-in `Omit` type because it does not keep the readonly modifier. export type Omit = { [P in keyof O as P extends K ? never : P]: O[P]; }; interface Resolver extends GenericResolver<[PropertyKey, object], object> { on1_: ([k]: Args) => [[{ readonly [P in typeof k]: any }], object]; on_1: ([, o]: Args) => [[keyof typeof o], object]; on11: ([k, o]: Args) => typeof k extends PropertyKey ? [ [], IsPropertyKeyLiteral extends true ? { [P in keyof typeof o as P extends typeof k ? never : P]: (typeof o)[P] } extends infer R ? Eq extends true ? typeof o : R : never : object, ] : never; } /** * [Fn] Omit properties from an object. * * Sig: `(k: K, o: O) => object` */ export default interface OmitFn extends GenericFn { def: ([k, o]: Args) => { [P in keyof typeof o as P extends typeof k ? never : P]: (typeof o)[P]; }; }