【发布时间】:2017-08-17 22:49:40
【问题描述】:
我正在使用 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 中的格式只是访问对象属性的不同方式。我还从here 获得了参考。但它并没有解释它们是否有任何区别。有人知道吗?
更新2
Here是访问JS属性的两种方式的区别。使用括号的方式似乎没有负面影响。但是,就我而言,默认值不会反映在 swagger 上。将对此进行研究。
【问题讨论】:
-
终于想通了。当我使用 typescript 时,swagger notes 是从 typescript 初始函数生成的,而不是从 JS 文件生成的。代码本身没有问题。
标签: javascript node.js typescript hapijs joi