I’m encountering a type error while working with schema validation in TypeScript using the Yup library. I have defined an interface formValidation with some optional fields, and I’m trying to use it in two different schema validations, loginValidation and signUpValidation. However, TypeScript is giving me an error regarding type incompatibility.
Here’s a simplified version of my code:
import { object, ObjectSchema, string, ref } from 'yup'
interface formValidation {
email: string,
password: string,
confirmPassword?: string
sex?: 'Male' | 'Female'
}
const loginValidation: ObjectSchema<formValidation> = object({
email: string().email('Invalid email address').required('Email is required'),
password: string().required('Password is required'),
});
const signUpValidation: ObjectSchema<formValidation> = object({
email: string().email('Invalid email address').required('Email is required'),
password: string().required('Password is required'),
confirmPassword: string().oneOf([ref('password')], 'Password must match'),
sex: string<'Male' | 'Female'>().required('Sex is required')
})
The error message I’m receiving is:
Type ‘ObjectSchema<{ email: string; password: string; }, AnyObject, { email: undefined; password: undefined; }, “”>’ is not assignable to type ‘ObjectSchema<formValidation, AnyObject, any, “”>’.
The types of ‘default(…).fields’ are incompatible between these types.
Type ‘Shape<{ email: string; password: string; }, AnyObject>’ is missing the following properties from type ‘Shape<formValidation, AnyObject>’: confirmPassword, sex
I want to keep the confirmPassword and sex fields optional in the formValidation interface but not necessarily include them in the loginValidation. How can I resolve this type error?