在 yup 模式中使用打字稿类型
Use typescript type in yup schema
是否可以在 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'
的类型,它包含字符串但不是任何字符串,因此您需要使用 .mixed
定义一个特定的值。
如果你不想直接传递带有类型值的数组,你可以看看如何制作它。
如果您想避免将类型转换为枚举,可以使用 const 断言以@Vencovsky 的回答为基础。
const possibleToppings = ['salami', 'tuna', 'cheese'] as const;
type toppings = typeof possibleToppings[number]; // 'salami' | 'tuna' | 'cheese'
yup.mixed<toppings>().oneOf([...possibleToppings]);
是否可以在 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'
的类型,它包含字符串但不是任何字符串,因此您需要使用 .mixed
定义一个特定的值。
如果你不想直接传递带有类型值的数组,你可以看看
如果您想避免将类型转换为枚举,可以使用 const 断言以@Vencovsky 的回答为基础。
const possibleToppings = ['salami', 'tuna', 'cheese'] as const;
type toppings = typeof possibleToppings[number]; // 'salami' | 'tuna' | 'cheese'
yup.mixed<toppings>().oneOf([...possibleToppings]);