如何在打字稿中做非短路条件?
How to do non short circuit condition in Typescript?
如何在打字稿中以非短路方式评估条件?
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函数里面调用。实际上我总是想在出现错误时默认调用show errors。
如果您想使用有副作用的函数(这通常不是一个好主意),明确说明什么时候调用什么可能会有所帮助:
var value1Valid = isValue1Valid(); // might show some messages
var value2Valid = isValue2Valid(); // might show some more messages
if (value1Valid && value2Valid) {
// submit data
}
要回答您的问题,您可以这样做
if ([isValue2Valid(), isValue2Valid()].every(Boolean)) {
//Submit data
}
评估所有函数调用,然后组合它们的值。但是你真的不应该首先让 isValueValid
调用 showError
。相反,让你的测试函数 return
错误消息,然后如果有的话,显示它们:
function getValue1Error() {
if (value1 === 0) return null;
else return "error1";
}
function getValue2Error() {
if (value2 === 0) return null;
else return "error2";
}
// then:
const errors = [getValue1Error(), getValue2Error()] // or even better, just a loop over your fields
if (errors.some(Boolean)) {
for (let error of errors)
showError(error);
} else {
// Submit data
}
如何在打字稿中以非短路方式评估条件?
Typescript 不允许 &
或 |
用于布尔类型。
我需要非短路检查的原因是我在函数 isValueValid
.
给出这个函数
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函数里面调用。实际上我总是想在出现错误时默认调用show errors。
如果您想使用有副作用的函数(这通常不是一个好主意),明确说明什么时候调用什么可能会有所帮助:
var value1Valid = isValue1Valid(); // might show some messages
var value2Valid = isValue2Valid(); // might show some more messages
if (value1Valid && value2Valid) {
// submit data
}
要回答您的问题,您可以这样做
if ([isValue2Valid(), isValue2Valid()].every(Boolean)) {
//Submit data
}
评估所有函数调用,然后组合它们的值。但是你真的不应该首先让 isValueValid
调用 showError
。相反,让你的测试函数 return
错误消息,然后如果有的话,显示它们:
function getValue1Error() {
if (value1 === 0) return null;
else return "error1";
}
function getValue2Error() {
if (value2 === 0) return null;
else return "error2";
}
// then:
const errors = [getValue1Error(), getValue2Error()] // or even better, just a loop over your fields
if (errors.some(Boolean)) {
for (let error of errors)
showError(error);
} else {
// Submit data
}