Tenho uma propriedade que deve permitir apenas certos números:
{
...
x: 1 | -1
}
Como definir isso no esquema de validação de entrada?
Se a entrada for JSON, é fácil:
x: z.union([z.literal(-1), z.literal(1)])
mas se a entrada vier na consulta de pesquisa, então os valores serão strings, então preciso ser capaz de forçar o número, mas ainda limitar a -1 e 1 para tornar o tipo inferido do esquema compatível com o tipo TypeScript.
Uma maneira de fazer isso seria aceitar números e strings, transformar strings em números e então refinar o resultado para analisar apenas números permitidos:
ou, alternativamente, canalize a transformação para seu esquema original:
Ou você pode usar um pré-processo também seguido por um pipe:
Os documentos também apontam para coerce , que pode funcionar da mesma maneira e corresponder mais de perto à sua pergunta original, embora com menos controle na conversão:
O tipo resultante deve ser corretamente inferido como número em todos os casos e provavelmente como a união necessária nos casos de pipe. Basta escolher seu sabor favorito e nível de controle :)
parque infantil zod