string,
bar: number
}
//TODO первый аргумент - ключ из типа, второй - тип значения по этому ключу
// validatorFoo и validatorBar не должны взрываться
export type CustomValidator<T> = (fieldName: keyof T, fieldValue: T[keyof T]) => string
const validatorFoo:CustomValidator<Test> = (fieldName: 'foo', fieldValue: string) => {
return 'qweqwe'
}
const validatorBar:CustomValidator<Test> = (fieldName: 'foo', fieldValue: number) => {
return 'qweqwe'
}
Покопался и нашел решение сам, спасибр комунити, поработало уточкой 🦆 type Test = { foo: string, bar: number fuz: null } //TODO первый аргумент - ключ из типа, второй - тип значения по этому ключу // validatorFoo и validatorBar не должны взрываться export type CustomValidator<T extends Record<string, unknown>, V = keyof T> = V extends infer R extends keyof T ? (fieldName: R, fieldValue: T[R], formData?: T) => string : never const validatorFoo:CustomValidator<Test> = (fieldName: 'fuz', fieldValue: null) => { return 'qweqwe' } const validatorBar:CustomValidator<Test> = (fieldName: 'bar', fieldValue: number) => { return 'qweqwe' }
Обсуждают сегодня