我在表单组上有此条件:
if((age>17 && (this.frType=="Infant"))
|| (age>40 && this.frType=="Grandchild")
|| (age<=5 &&
(this.frType!="Child"
|| this.frType!="Infant"
|| this.frType!="Grandchild" || this.frType!="Cousin")))
它包含3个主要条件:
infant
grandchild
child
,infant
,grandchild
或cousin
。如果满足以下条件之一,我将发送一条错误消息。
我收到的错误是:
[ts]由于类型不同,此条件将始终返回“ true” '“ Child”'和'“ Infant”'没有重叠。 [2367]
在if
条件的这一部分`:
|| this.frType!="Infant" || this.frType!="Grandchild" || this.frType!="Cousin")))
我在其他组件中使用的是确切条件,并且没有显示错误。
if((age>17 && (this.family_relation_type=="Infant"))
|| (age>40 && this.family_relation_type=="Grandchild")
|| (age<=5 &&
(this.family_relation_type!="Child" ||
this.family_relation_type!="Infant" ||
this.family_relation_type!="Grandchild" ||
this.family_relation_type!="Cousin")))
这是我计算这两个部分的年龄的方法:
let timeDiff = Math.abs(Date.now() - this.formGroup.controls['dob'].value);
let age = Math.floor((timeDiff / (1000 * 3600 * 24))/365);
答案 0 :(得分:2)
考虑独立表达式:
(this.frType!="Child" || this.frType!="Infant")
如果frType
为Child
,则第二部分为true,因此表达式的计算结果为true
。如果frType
为Infant
,则第一部分为true,因此表达式的计算结果为true
。如果frType
既不是 Child
也不是Infant
,那么第一部分将为true,并且该表达式将再次赋值为true
-逻辑有误,它将始终解析为true
。
(如果您为||
和Grandchild
添加了额外的Cousin
条件,同一件事不断发生-它将始终解析为true
)
请改用&&
:
|| (age<=5 && (
this.frType!="Child"
&& this.frType!="Infant"
&& this.frType!="Grandchild"
&& this.frType!="Cousin"
))
或者,为使逻辑更容易理解,您可以考虑使用数组,并使用.includes
:
const kidsFiveAndUnder = ['Child', 'Infant', 'Grandchild', 'Cousin'];
// ...
|| (age <= 5 && !kidsFiveAndUnder.includes(this.frType))
答案 1 :(得分:2)
也许我可以帮助某人。
就我而言,错误是由以下原因触发的:
*ngIf="fooArray.length === 0"
所以我将其修改为:
*ngIf="fooArray.length < 1"
对我毫无意义,但它可以工作。
答案 2 :(得分:1)
就我而言,我只需要重建我的应用程序,因为类型定义暂时不同步。
答案 3 :(得分:0)
明确定义所有变量的数据类型。
例如,此代码具有与线程标题中提到的错误相同的错误,我通过显式定义变量的数据类型进行修复。
发件人:
const selectedLangCulture = "en"; // or "ar-SA"
const direction = "rtl";
const languageChanged =
(direction === "rtl" && selectedLangCulture === "en") ||
(direction === "ltr" && selectedLangCulture === "ar-SA");
收件人:
const selectedLangCulture: string = "en"; // Put the datatype string.
const direction: string = "rtl"; // Put the datatype string.
const languageChanged =
(direction === "rtl" && selectedLangCulture === "en") ||
(direction === "ltr" && selectedLangCulture === "ar-SA");