问题描述
打字稿类型可以用于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]);