Приветствую, знатоки.
Я создал класс, в котором объединил несколько методов для валидации.
Использую vue и библиотеку vuelidate
Мне нужно типизировать переменную v$, подскажите как наиболее корректно это было бы сделать? Попробовал ReturnType, увы подсказок webstorm никаких не выдаёт, хотя и явных ошибок нет.
Пример rules&formdata
const data = {
rules: {
login: base({}),
password: password
},
formData: reactive({
login: '',
password: '',
remember_me: false
}
Каждый ключ rules это так-же объёт, которые включает в себя метод проверки и сообщение об ошибке.
export const base = ({ min = 2, max = 255 }) => {
return {
minLength: ValidatorErrorMsgVuelidate.minLength(min),
maxLength: ValidatorErrorMsgVuelidate.maxLength(max),
required: ValidatorErrorMsgVuelidate.required()
}
}
Объединяющий класс
export default class ValidatorVuelidate {
constructor(rules, formData) {
this.v$ = useVuelidate(rules, formData)
}
public validateField = (event: Event): void => {
const eventTarget = event.target as HTMLInputElement
const nameField = eventTarget.name
this.v$.value[nameField].$touch()
if (this.v$.value[nameField].$error) {
this.v$.value[nameField].$validate()
}
}
public validateForm = (): boolean | void => {
this.v$.value.$validate()
if (this.v$.value.$error) {
return this.v$.value.$touch()
}
return true
}
public resetValidateField = (nameField: string): void => {
this.v$.value[nameField].$reset()
}
}
v$ является ref, включает в себя некоторые методы, а так-же имена полей формы.
Например:
v$.value.$touch()
Типы самой функции useVuelidate
export function useVuelidate(globalConfig?: GlobalConfig): Ref<Validation>;
export function useVuelidate<
T extends {[key in keyof Vargs]: any},
Vargs extends ValidationArgs = ValidationArgs,
EState extends ExtractState<Vargs> = ExtractState<Vargs>
>(
validationsArgs: Ref<Vargs> | Vargs,
state: T | Ref<T> | ToRefs<T>,
globalConfig?: GlobalConfig
): Ref<Validation<Vargs, T>>;
export default useVuelidate;