Angular Typescript==不直接使用值。比如';如果(1==2)和#x27;不允许

Angular Typescript==不直接使用值。比如';如果(1==2)和#x27;不允许,angular,typescript,operators,Angular,Typescript,Operators,我正在用代码覆盖率报告创建Angular应用程序 在一种方法中,我想使用一些假条件跳过某一行,因此我尝试在我的组件中编写一个函数,如: sum(num1:number,num2:number){ if(1 == 2) { //Some Code } return num1+num2; } 但它给我的错误信息是 运算符“==”不能应用于类型“1”和“2” 在某些情况下允许,在某些情况下不允许,例如: if(1 != 2) //not allowe

我正在用代码覆盖率报告创建Angular应用程序

在一种方法中,我想使用一些假条件跳过某一行,因此我尝试在我的组件中编写一个函数,如:

sum(num1:number,num2:number){
    if(1 == 2)
    {
        //Some Code
    }
     return num1+num2;
}
但它给我的错误信息是

运算符“==”不能应用于类型“1”和“2”

在某些情况下允许,在某些情况下不允许,例如:

if(1 != 2) //not allowed
if(1 == 2) //not allowed
if('1' == '2') //not allowed
if(1===2) //not allowed

if(2 == 2) //allowed
if(2 != 2) //allowed
if('1' == '1') //allowed
if(1===1) //allowed
if(parseInt('1') == parseInt('2')) //allowed

有人能解释一下这些情况吗?

请检查一下它是数字还是字符串,因为在某些情况下,如果您从其他组件获取值,它可能/可能不是数字格式,而是字符串引用的数字,如“12345”,而不是12345,因此可能会产生一些问题,请检查它是数字还是字符串,因为在某些情况下,如果您从其他组件获取值,它可能/可能不是数字格式,而是字符串引用的数字,如“12345”,而不是12345,因此它可能会产生一些问题

对不同类型的值使用比较运算符通常是错误的,因此,TypeScript警告:

if (1 === "1") {} // error
TypeScript将数字和字符串视为文本,因此比较两个不同的文本将是一个错误,原因相同:

if (1 === 2) {} // error
请注意,在JavaScript中比较两个文本通常保证有一个已知的结果。
(1==2)
只有一个可能的结果。因此,一般来说,编写代码没有多大用处,因为您可以用已知的结果替换它:
(1==2)
可以替换为
false
,而
(1==1)
可以替换为
true
。因此,语言维护人员没有太多理由关心添加对比较两个不同文本的支持。。。很难想象一个有效的比较文字的用例,如果不比较文字就不能更好地服务于此

但是,如果您确实需要进行这样的比较,您可以将(其中一个)文字类型扩展到它们的通用超类型,如
number
string

if (1 as number == 2) { console.log("nope"); } // works
if ('1' as string == '2') { console.log("nope"); } // works
你告诉打字稿要考虑<代码> 1 >代码>不是文字>代码> 1代码>而是作为<代码>号码<代码>,并且可以与<代码> 2 < /代码>进行比较。但再说一次,你真的不需要这么做。相反,您可以执行以下操作:

if (false) { console.log("nope"); } // unreachable code detected!
这一新警告也是一个好警告。通常,无法访问的代码是错误的标志。就我个人而言,我宁愿将代码注释掉或删除,也不愿留下无法访问的代码。或者只是留下错误作为提醒,你应该回去清理它

但是,如果您真的希望
if(false){}
场景在没有错误的情况下工作,那么更惯用的方法是

if (false as boolean) { console.log("nope"); } // works
您告诉编译器考虑<代码> false <代码>只是一个<代码>布尔< /COD>,因此它不再意识到或不关心条件后的代码是不可到达的。
希望这是有意义的。

对不同类型的值使用比较运算符通常是错误的,因此TypeScript警告:

if (1 === "1") {} // error
TypeScript将数字和字符串视为文本,因此比较两个不同的文本将是一个错误,原因相同:

if (1 === 2) {} // error
请注意,在JavaScript中比较两个文本通常保证有一个已知的结果。
(1==2)
只有一个可能的结果。因此,一般来说,编写代码没有多大用处,因为您可以用已知的结果替换它:
(1==2)
可以替换为
false
,而
(1==1)
可以替换为
true
。因此,语言维护人员没有太多理由关心添加对比较两个不同文本的支持。。。很难想象一个有效的比较文字的用例,如果不比较文字就不能更好地服务于此

但是,如果您确实需要进行这样的比较,您可以将(其中一个)文字类型扩展到它们的通用超类型,如
number
string

if (1 as number == 2) { console.log("nope"); } // works
if ('1' as string == '2') { console.log("nope"); } // works
你告诉打字稿要考虑<代码> 1 >代码>不是文字>代码> 1代码>而是作为<代码>号码<代码>,并且可以与<代码> 2 < /代码>进行比较。但再说一次,你真的不需要这么做。相反,您可以执行以下操作:

if (false) { console.log("nope"); } // unreachable code detected!
这一新警告也是一个好警告。通常,无法访问的代码是错误的标志。就我个人而言,我宁愿将代码注释掉或删除,也不愿留下无法访问的代码。或者只是留下错误作为提醒,你应该回去清理它

但是,如果您真的希望
if(false){}
场景在没有错误的情况下工作,那么更惯用的方法是

if (false as boolean) { console.log("nope"); } // works
您告诉编译器考虑<代码> false <代码>只是一个<代码>布尔< /COD>,因此它不再意识到或不关心条件后的代码是不可到达的。
希望这是有意义的。

这是因为您应该使用===而不是==进行类型检查。我也尝试了1===2,但不起作用。用这些场景编辑我的问题。我想你的意思是TypeScript可能会重复,因为它会给你一个错误。:)重复的问题应该解释。这是因为您应该使用===而不是==进行类型检查。我也尝试了1===2,但不起作用。用这些场景编辑我的问题。我想你的意思是TypeScript可能会重复,因为它会给你一个错误。:)重复的问题应该解释。