打字稿 - 具有约束的通用休息参数

时间:2021-01-16 04:13:11

标签: typescript

我有以下类型的“验证器函数”:

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
}

这会产生正确的返回值,但参数不是强类型的,因为我有 。有没有办法通过约束来做到这一点,确保所有 V 值和相同类型以及所有 P 值都扩展 {})?谢谢!

0 个答案:

没有答案