我在表单组上有以下情况:
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个主要条件:
1.如果是17岁的人,则不能设置为infant
1.如果一个人大于40,他不可能是grandchild
1.未满5岁者,应为child
、infant
、grandchild
或cousin
。
如果这些条件之一为真,我将发送错误消息。
我收到的错误是:
[TS]此条件将始终返回‘True’,因为类型‘“Child”’和‘“Infant”’没有重叠。[2367][晓雨-0920交稿]
在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);
6条答案
按热度按时间btxsgosb1#
考虑一下独立的表达式:
如果
frType
为Child
,则第二部分为真,因此表达式的计算结果为true
。如果frType
为Infant
,则第一部分为真,因此表达式的计算结果为true
。如果frType
既不是*Child
,也不是Infant
,则第一部分将为真,并且表达式将再次求值为true
-逻辑有故障,它将始终解析为true
。(如果您为
Grandchild
和Cousin
添加额外的||
条件,同样的事情会继续发生-它将始终解析为true
)或者使用
&&
:或者,为了使逻辑更容易理解,您可以考虑使用数组,并使用
.includes
:tkqqtvp12#
在我的案例中,该错误是由以下因素触发的:
*ngIf="fooArray.length === 0"
因此我将其修改为:
*ngIf="fooArray.length < 1"
对我来说没什么意义,但很管用。
zzzyeukh3#
显式定义所有变量的数据类型。
例如,此代码具有线程标题中提到的相同错误,我通过显式定义变量的数据类型修复了该错误。
出发地:
致:
n3ipq98p4#
最近,我在这个问题上苦苦挣扎。在这里分享我的经验
基本上,IDE不允许将object.enum与字符串进行比较。作为解决方案,在Component.ts中添加一个方法来比较枚举
详细信息:
现在,在Component.html中,我尝试比较模型状态
我还尝试在Component.ts中定义状态枚举,并将其用于比较
使用上面的解决方案,不会出现IDE错误,但条件永远不为真,因为enum[Value]给出了一个数值。
我尝试的下一个选项如下
但最终在IDE中再次出现错误
最后是什么解决了这个问题?它在组件中实现了一个方法。
解决方案
Component.ts
注:状态[m.status]为未知
超文本标记语言
s5a0g9ez5#
在我的例子中,我只需要重新构建我的应用程序,因为类型定义短暂地不同步。
wyyhbhjk6#
在我的例子中,我使用了名为
type
的类型作为按钮元素的React.ComponentPropsWithRef<'button'>
type
被覆盖,因为React.ComponentPropsWithRef<'button'>
中也有type
。我用elementType
替换了它,问题就解决了。