【发布时间】:2016-09-21 09:28:26
【问题描述】:
如何在打字稿中以非短路方式评估条件?
Typescript 不允许将 & 或 | 用于布尔类型。
我需要非短路检查的原因是我在函数isValueValid 中调用了showErrors。
鉴于此功能
function isValue1Valid(){
if(value1 === 0) return true;
showErrors1();
return false;
}
function isValue2Valid(){
if(value2 === 0) return true;
showErrors2();
return false;
}
那么在我的情况下
if(isValue2Valid() & isValue2Valid()){
//Submit data
}
虽然我可以这样做
if(isValue2Valid() & isValue2Valid()){
//Submit data
return;
}
showErrors1()
showErrors2()
但我觉得在 isValueValid 函数中调用它。实际上,我总是想在出现错误时默认调用显示错误。
【问题讨论】:
-
为了避免“XY 问题”:您为什么不想短路? (我怀疑你依赖于副作用......如果是这样的话,从条件表达式中提取那些。)
-
听起来确实是一个 XY 问题。当我开始着手编程时,我认为自己会很聪明,并且做了类似
if (process(otherStuff) && valid(stuff))这样的事情,却发现如果我交换条件它就行不通了。 -
我在
valid1() & valid2()内部调用了一些函数。 -
@janmvtrinidad 你可以按照@Richard 的建议去做,基本上是
var valid1 = isValue1Valid(); valid2 = isValue2Valid(); if (valid1 && valid2)尽管将验证逻辑与错误显示分离可能会更好,所以它看起来像if (isValid()) { /* do stuff */ } else { /* display errors */ } -
我想我会重构让验证函数返回一个消息列表。如果列表为空,则验证通过。所以你最终得到:
var msgs = validation1(); msgs.concat(validation2()); if (msgs.length === 0) { return;}.
标签: javascript typescript evaluation-strategy