如何转换对象模式的属性模式以派生新的对象模式?

问题描述

有没有办法内省然后转换 Joi 模式?

我看到有 any.describe(),它“返回一个代表架构内部配置的对象”,但随后我必须将该内部配置映射回架构构建器调用并自己重新创建架构。

>

例如给定

const PersonSchema = Joi.object().keys({
  firstName: Joi.string().required(),lastName: Joi.string().required(),age: Joi.number().required(),});

我想定义一个泛型函数来接受任何对象模式,并使其属性支持与以下等效的原始类型数组:

const PersonFilterSchema = Joi.object().keys({
  firstName: Joi.array().items(Joi.string().required()).optional(),lastName: Joi.array().items(Joi.string().required()).optional(),age: Joi.array().items(Joi.number().required()).optional(),});

即我希望能够写出这样的东西:

function createFilterSchema(schema) {
  return Joi.object().keys(
    Object.fromEntries(
      schema
        .getEntries()
        .map(([key,value]) => [key,Joi.array().items(value).optional()])
    )
  );
}

然后在其他地方将它与我拥有的任何原始模式一起使用:

const PersonFilterSchema = createFilterSchema(PersonSchema);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)