是的,条件验证和 TypeScript

use*_*752 6 typescript yup

给出以下接口和相应的Yup架构。TypeScript 有没有办法自动推断条件函数参数(例如enabledschema)?

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)
})
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了yupObject()<Foo>shape<Foo>(..)但都没有帮助。如果不能自动完成,那么schema在这种情况下合适的类型是什么?

YAS*_*KAR 0

你能尝试这样的事情吗

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() 
}
Run Code Online (Sandbox Code Playgroud)