【问题标题】:Conditional chaining in JavaScript or TypeScriptJavaScript 或 TypeScript 中的条件链接
【发布时间】:2022-01-31 20:27:26
【问题描述】:

是否有在条件下将函数添加到链中的语法?

在这个例子中,如果modifier === true,我希望myKeyJoi.string().required(),但如果是false,我希望Joi.string()

function customJoi(modifier) {
  return Joi.object({
    myKey: Joi.string() //#If(modifier) .required() #EndIf
  });
}

我知道我可以不使用此功能,但需要多个步骤。我只是想知道是否有一种为大型对象简洁地编写它的好方法。

【问题讨论】:

  • @Touffy :shrug: OP 声明“条件链接”,这似乎很好地描述了问题并且问题详细说明了; IMO 没关系。
  • 我同意,一旦你仔细阅读它,这是一个很好的描述。但是现在谁会仔细阅读呢? (见这篇文章的第一条评论……)。也许只是用斜体写“可选”之类的?
  • @Touffy 我想大多数在这里回答和评论的人都没有看错:)
  • @Touffy 我的错 - 有时会发生在我身上 - 希望我得到赦免.. ;)
  • @Touffy 它在任何地方都没有说“可选”?

标签: javascript typescript joi


【解决方案1】:

如果不需要,您可以使用optional

myKey: Joi.string()[modifier ? 'required' : 'optional']()

【讨论】:

  • 谢谢,我认为这是我们能得到的最好的 :) 虽然一个限制是你必须有一个后备方法才能让三元运算符工作,因为 undefined 似乎不被接受.
  • 是的。虽然我猜在受控环境中,您可以在您设计的任何可链式上定义“noop”方法,因此您始终可以选择。或者……gasp……在 Object.prototype 上定义它,然后被你所有的同事鄙视。
【解决方案2】:

您可以通过ternary 实现这一目标。

function customJoi(modifier) {
    return Joi.object({
        myKey: modifier ? Joi.string().required() : Joi.string()
    });
}

【讨论】:

  • 谢谢,这也是一个很好的答案,但我会接受 Nina Scholz 的答案,因为它更接近我所寻找的,尤其是对于更长的链条。尽管您的方法的一个优点是您不需要三元运算符的后备方法。
猜你喜欢
  • 1970-01-01
  • 2017-10-27
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 2016-02-26
  • 2017-09-08
  • 1970-01-01
相关资源
最近更新 更多