我有以下类型的“验证器函数”:
type Validator<V, P extends {} | void = void> = (value: V, props: P) => string | undefined
它接受一个值,以及可选的一些附加信息作为对象并返回错误消息或未定义。
现在我想创建一个函数,它接受多个这些“验证器函数”并返回一个像这样的:
const validate = merge(
(value: string | number) => !Boolean(value) ? 'Required Error' : undefined
(value: string, props: { minLength: number }) => value < minLength ? 'Min Length Error' : undefined
(value: string, props: { maxLength: number }) => value > maxLength ? 'Max Length Error' : undefined
)
const result = validate('1234567', { minLength: 1, maxLength: 6 }) // => 'Max Length Error'
我有实现,但我似乎无法正确输入。我有以下几点:
function merge<T extends Validator<any, any>[]>(...fns: T): T extends Validator<infer V, infer R>[] ? Validator<V, R> : never {
// Implementation
}
这会产生正确的返回值,但参数不是强类型的,因为我有