设置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") } 

在招摇,默认值不适用。

这是我的问题:

  1. 编译后为什么代码变得不同?
  2. ["default"]("defaultstring")是什么意思,它是做什么的?
  3. 我怎样才能写打字稿的代码,以确保它可以编译为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(), } }