我假设您要做的是强制布尔值为0或1,将它们相乘以确定是否有零,然后强制结果数返回到布尔值以用于
if
Typescript不喜欢这个主意。虽然它可能在原始Javascript中工作,但Typescript说不行。
你可以通过替换你的
reduce
用电话
every
在布尔函数上:
function _controlValid(form: FormGroup, fieldName: string[], enableFieldName: string) {
if (fieldName.map(field => {
return form.controls[field].valid;
}).every((a: boolean) => a)) {
form.controls[enableFieldName].enable();
} else {
form.controls[enableFieldName].disable();
}
}
identity
(x) => x
),然后你就可以写了
.every(identity)
更清楚。
但是这个代码还是有点困扰着我。那个
情况真的很难看。我可能会分解两个助手函数来清理它:
const allTrue = (xs) => xs.every(x => x);
const fieldsValid = (controls, names) => names.map(n => controls[n].valid)
function _controlValid(form: FormGroup, fieldName: string[], enableFieldName: string) {
if (allTrue(fieldsValid(form.controls, fieldName))) {
form.controls[enableFieldName].enable();
} else {
form.controls[enableFieldName].disable();
}
}