TypeScript 在使用 .required() 时推断 Yup 架构的可选字段

TypeScript infers optional fields for Yup schema when using .required()

提问人:Mehmet Emre Ast 提问时间:11/8/2023 更新时间:11/8/2023 访问量:36

问:

我正在通过构建 yup 模式来验证我的创建活动表单。此表单有一个名为 sellers 的字段,该字段将是类型为 的对象数组。Typescript 使用可选成员推断 sellers 对象的类型。这会导致我的表单出现类型错误。{id: number; label: string}

这是我的 Yup 架构的最小示例:

const validationSchema = yup.object().shape({
    sellers: yup
        .array()
        .of(
            yup.object().shape({
                id: yup.number().required().defined(),
                label: yup.string().defined().required(),
            }),
        )
        .required(),
});

validationSchema 的预期 TypeScript 类型:

{
    sellers: {
        id: number;
        label: string;
    }[];
}

推断的 validationSchema 的实际 TypeScript 类型:

{
    sellers: {
        id?: number | undefined;
        label?: string | undefined;
    }[];
}

我正在使用 TypeScript 版本 5.2.2 和 Yup 版本 1.3.2,由于 .required() 和 .defined() 方法,我希望 TypeScript 能够根据需要识别 id 和标签,但它没有发生。有没有办法强制 TypeScript 在其类型推断中遵守 Yup 约束?

reactjs typescript 表单 是的

评论


答: 暂无答案