export type Narrow = INPUT extends Promise ? Promise> : INPUT extends (...args: infer ARGS) => infer RETURN ? (...args: Narrow) => Narrow : INPUT extends [] ? [] : INPUT extends object ? { [KEY in keyof INPUT]: Narrow; } : INPUT extends string | number | boolean | bigint ? INPUT : never;