如何解决在yup模式中使用打字稿类型
打字稿类型可以用于yup验证吗?
是的,您可以:
yup.string().oneOf(['salami','tuna','cheese']);
在我的组件之一中,我定义了这种类型:
type toppings = 'salami' | 'tuna' | 'cheese';
我可以将两者结合吗?即:
type toppings = 'salami' | 'tuna' | 'cheese';
yup.string().oneOf(toppings); // <- how?
解决方法
您可以使用yup.mixed<TYPE>()
传递您的通用类型。
yup.mixed<toppings>().oneOf(['salami','tuna','cheese']);
您将其作为yup.string()
传递,但它不是字符串,而是'salami' | 'tuna' | 'cheese'
的类型,其中包含字符串但不包含任何字符串,因此您需要使用{{1 }}来定义一个特定的值。
如果您不想直接将类型值传递给数组,可以看看this question的用法。
,为了稍微建立在@Vencovsky 的回答之上,如果您想避免将类型转换为枚举,可以使用 const 断言。
const possibleToppings = ['salami','cheese'] as const;
type toppings = typeof possibleToppings[number]; // 'salami' | 'tuna' | 'cheese'
yup.mixed<toppings>().oneOf([...possibleToppings]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。