Use o tipo de texto digitado no esquema yup

Sep 24 2020

Um tipo de texto datilografado pode ser usado em uma validação do yup?

Em yup, você pode:

yup.string().oneOf(['salami', 'tuna', 'cheese']);

Em um dos meus componentes, tenho este tipo definido:

type toppings = 'salami' | 'tuna' | 'cheese';

Posso combinar esses dois? Ou seja:

type toppings = 'salami' | 'tuna' | 'cheese';
yup.string().oneOf(toppings); // <- how?

Respostas

1 Vencovsky Sep 24 2020 at 19:09

Você pode usar a yup.mixed<TYPE>()passagem de seu tipo genérico.

yup.mixed<toppings>().oneOf(['salami', 'tuna', 'cheese']);

Você está passando como yup.string(), mas não é uma string, é o tipo de 'salami' | 'tuna' | 'cheese', que contém string, mas não é nenhuma string, então você precisa usar .mixedpara definir um valor específico.

Se você não quiser passar diretamente o array com os valores de tipo, você pode dar uma olhada nesta pergunta sobre como fazer isso.