- bounty将在3天后过期**。回答此问题可获得+50的声誉奖励。learnbydoing正在寻找来自声誉良好来源的答案。
我目前有以下数据类型:
type TPlan =
| {
type: "pro";
content: { signedAt: string; expiresOn: string };
}
| {
type: "default" | "regular";
content: { signedAt: string };
};
并考虑到前面的数据类型,我为对象的每个结构定义了一个模式:
const schemaA = object({
type: mixed<"pro">().oneOf(["pro"]).defined(),
content: object({
signedAt: string().defined(),
expiresOn: string().defined(),
}),
});
const schemaB = object({
type: mixed<"default" | "regular">().oneOf(["default", "regular"]).defined(),
content: object({
signedAt: string().defined(),
}),
});
当我对模式进行单独推断时,数据类型是正确的,如下所示:
type TSchemaA = InferType<typeof schemaA>;
type TSchemaB = InferType<typeof schemaB>;
但是,当我使用.oneOf()
方法定义验证模式时,TypeScript说数据类型不正确。
export const validationSchema = mixed<TSchemaA | TSchemaB>()
.oneOf([schemaA, schemaB])
.defined();
我的问题是,如何使用Yup创建一个考虑到初始类型(TPlan
)的验证模式呢?因为除了需要验证模式来验证JSON对象之外,我还需要模式的推理是正确的。
1条答案
按热度按时间6vl6ewon1#
这不是你想要的,它会创建一个yup模式,可以用来验证TSchemaA或TSchemaB,但是你不想验证模式,你想验证数据。
以下是我的建议:
那么这个将针对多个架构进行验证的帮助器:
我已经铸造输出作为TPlan,这应该是确定的情况。
那就叫它: