设置validation的默认值
我使用Joi在我的node.js服务器上使用hapijs框架来validation服务的有效载荷。 它过去看起来像这样(在我的脚本代码以及编译为JavaScript后):
payload: { para1: Joi.number().required(), para2: Joi.string() }
现在我想设置两个参数的默认值。 如果代码是用JavaScript编写的,我可以这样做:
payload: { para1: Joi.number().required().default(1), para2: Joi.string().default("defaultstring") }
我在swaggertesting它,默认值实际上成为我设置的值。
不过,我的项目是用打字稿写的。 我做了同样的事情和编译打字稿的代码。 结果JavaScript看起来像这样:
payload: { para1: Joi.number().required()["default"](1), para2: Joi.string()["default"]("defaultstring") }
在招摇,默认值不适用。
这是我的问题:
- 编译后为什么代码变得不同?
-
["default"]("defaultstring")
是什么意思,它是做什么的? - 我怎样才能写打字稿的代码,以确保它可以编译为
Joi.string().default("defaultstring")
更新
根据@ rsp的post,问题2中的格式是访问对象属性的不同方式。 我也从这里得到参考。 但是这并不能解释它们是否有任何区别。 有人有什么主意吗?
UPDATE2
这里是访问JS属性的两种方式之间的区别。 使用括号方式似乎没有负面影响。 但是,在我的情况下,默认值并不反映在大摇大摆。 将会对此进行研究。
在JavaScript中:
required().default(1)
是这样的:
required()["default"](1)
因为您可以通过以下方式访问对象属性:
object["propertyName"]
要么:
object.propertyName
(在第二种情况下有一定的限制)。
所以奇怪的是,如果不需要,TypeScript会输出更长的样式,但是更奇怪的是,更长的样式不能和更短的样式完全相同。
我会尝试手动将编译的JavaScript更改为较短的版本,看看是否有帮助。 如果不是,那么问题就在别的地方。 我的怀疑是它不会帮助。
.default()
应该在TypeScript中工作,因为它在@ types / joi中定义 – 请参阅:
但另一方面有这样的评论:
// TODO express type of Schema in a type-parameter (.default, .valid, .example etc)
这可能表明.default()
实现尚未准备就绪 – 请参阅:
也有这个问题: joi.d.ts out of date, missing types
使用应该使用默认()如下面的代码:
validate: { payload: { para1: Joi.number().integer().min(1).max(100).default(10).required(), para2: Joi.string().min(1).max(100).default("TEST").required(), } }