export type SuccessParameterReducerResult = { valid: true; rest: string[]; parsed: Omit & {[key in keyof T]?: T[key] | (key extends keyof S ? S[key] : never)}; }; export type ParameterReducerResult = | undefined | SuccessParameterReducerResult | {valid: false; reason: string}; export type ParameterReducer = ( input: string[], parsed: TAlreadyParsed, ) => ParameterReducerResult; export type ParsedString = | {readonly valid: true; readonly value: TParsed} | {readonly valid: false; readonly reason: string};