如何为返回函数的字段正确构造 Joi 验证

how to properly construct a Joi validation for a field returning a function

提问人:Kazun 提问时间:9/16/2023 最后编辑:Kazun 更新时间:9/16/2023 访问量:40

问:

我正在尝试为以下方面构建 Joi 模式验证:

type Toy = {
id: string;
codeName: (nameFormat?: string) => string;
price: number;
}

问题出在验证上。 我不知道如何表示 the 是一个带有返回字符串的可选参数(字符串类型)的函数。 而 codeName 字段实际上是必填字段codeNamecodeName

我试图用文档制定一个解决方案 - 没有更好的结果 我没有在 Stack Overflow 和其他方面找到任何收敛主题

我的项目在版本 14 中使用 Joi 我将不胜感激您的帮助

当我谈到模式时,我试图构建什么: 例如

type CarSchema = {
mark: Joi.string().required(),
color: Joi.string().required(),
price: Joi.number().required(),
accessories: Joi.string().optional(),
}
打字稿 验证 JOI

评论

0赞 Vivick 9/16/2023
你试过用吗?Joi.function
0赞 Kazun 9/16/2023
是的,在我的 Joi 版本中被称为 .如果您将使用它,您将能够指定参数的数量,但我还没有弄清楚如何传递其他部分,例如参数类型或返回类型func
0赞 Vivick 9/16/2023
您不能断言参数或返回类型,因为没有 RTTI

答:

0赞 Vivick 9/16/2023 #1

你能做的最好的事情是:

export const toySchema = Joi.object({
  id: Joi.string(),
  codeName: Joi.func().minArity(0).maxArity(1),
  price: Joi.number(),
});

由于 JavaScript 没有类型概念,并且 TypeScript 不提供 RTTI,因此无法检查函数的预期参数的类型或返回类型。