我正在使用 Joi 使用 hapijs 框架在我的 node.js 服务器中验证服务的有效负载。它曾经看起来像这样(在我的打字稿代码以及编译为 javascript 之后):
payload: {
para1: Joi.number().required(),
para2: Joi.string()
}
现在我想设置这两个参数的默认值。如果代码是用 javascript 编写的,我可以这样做:
payload: {
para1: Joi.number().required().default(1),
para2: Joi.string().default("defaultstring")
}
我大摇大摆地测试了它,默认值实际上变成了我设置的值。
但是,我的项目是用打字稿编写的。我做了同样的事情并编译了打字稿代码。结果 javascript 如下所示:
payload: {
para1: Joi.number().required()["default"](1),
para2: Joi.string()["default"]("defaultstring")
}
在 swagger 中,不应用默认值。
以下是我的问题:
- 为什么编译后代码变得不同?
- 是什么
["default"]("defaultstring")
意思,它有什么作用? - 我如何编写打字稿代码以确保它可以编译为
Joi.string().default("defaultstring")
更新
根据@rsp 的帖子,问题2 中的格式只是访问对象属性的不同方式。我也从这里得到参考。但它并没有解释它们是否有任何区别。有人有什么主意吗?
更新2
这是访问 JS 属性的两种方式之间的区别。使用括号的方式似乎没有负面影响。但是,就我而言,默认值不会反映在 swagger 上。将对其进行研究。