在hapi/joi。如何将 2 个不同的模式验证合并为一个?

In hapi/joi. How can I combine 2 different schema validations in one?

这就是我正在做的事情:

import Joi, { AnySchema } from '@hapi/joi';

export const apiExtraInfo = (): AnySchema => {
  return Joi.object({
    message: Joi.string(),
    apiVersion: Joi.string()
  });
};

export const normalizeContentSchema = (): AnySchema => {
  return Joi.object({
    ...apiExtraInfo(),
    facets: Joi.object(),
    count: Joi.number().required(),
    content: Joi.array().items(Joi.object()).required()
  });
};

架构 apiExtraInfo 将用于许多不同的架构,因此我不想重复自己。

我这样做的方式使我的架构失败。

https://hapi.dev/module/joi/

有什么建议吗?

api_schema 和构成 api_schema 的对象(下面定义为 api_schema_definition)分开。

这是因为 Joi 模式只接受普通对象。

(使用quokka.js测试)

const Joi = require("@hapi/joi");

const test_api_ok = {
  message: "hello",
  apiVersion: "any",
};

const test_normalize = {
  message: "hello",
  apiVersion: "any",
  facets: {},
  count: 1,
  content: [{}],
};

const api_schema_definition = () => ({
  message: Joi.string(),
  apiVersion: Joi.string(),
});

const api_schema = Joi.object({
  ...api_schema_definition(),
});

const joined_schema = Joi.object({
  ...api_schema_definition(),
  facets: Joi.object(),
  count: Joi.number().required(),
  content: Joi.array().items(Joi.object()).required(),
});

joined_schema.validate(test_normalize); //?