ParamDef<P>: { decode: ((str) => Exclude<P, undefined>); encode?: ((val) => string); list?: never; } | (Exclude<P, undefined> extends (infer E)[] ? { decode: ((str) => E); encode?: ((val) => string); list: true; } : never) | (string extends P ? { decode?: ((str) => Exclude<P, undefined>); encode?: ((val) => string); list?: never; } : never)