在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]);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...