Yup villkorlig validering och TypeScript
Givet följande gränssnitt och motsvarande Yup-schema. Finns det ett sätt för TypeScript att automatiskt härleda de villkorliga funktionsargumenten (t.ex. enabled och schema)?
import { object as yupObject, string as yupString, boolean as yupBoolean } from 'yup';
interface Foo {
enabled: boolean
name?: string
}
const fooSchema = yupObject().shape({
enabled: yupBoolean(),
name: yupString().when('enabled', (enabled, schema) => enabled ? schema.required() : schema)
})
Jag har försökt yupObject()<Foo> och shape<Foo>(..) men ingen av dem hjälpte. Om det inte kan göras automatiskt, vilken är den lämpliga typen för schema i detta fall?
Svar #1
Vad som fungerade för mig var något i stil med detta:
import * as Yup from 'yup';
import { SchemaOf, StringSchema } from 'yup';
interface Foo {
enabled: boolean;
name?: string;
}
const FooSchemaObj: SchemaOf<Foo> = Yup.object({
enabled: Yup.boolean(),
name: Yup.string().when('enabled', (enabled: boolean, schema: StringSchema) =>
enabled ? schema.required() : schema
)
});
Jag lyckades få Typescript att fungera med den första parametern och schemaegenskapen, men tyvärr inte automatiskt.
Svar #2
Kan du prova något liknande detta
import * as Yup from "yup"
interface Foo {
enabled?: Yup.BooleanSchema
name?: Yup.StringSchema
}
const FooSchemaObj: Foo = {
name: Yup.string().when('enabled', (enabled, schema) => enabled ?
schema.required() : schema),
enabled: Yup.boolean()
}
