TSLint双重vs三重平等

use*_*079 22 equality typescript

我知道一个单一的平等标志意味着分配; 双重意味着平等; 和三重意味着平等和相同的类型.

我不明白为什么打字稿linter会让我在这种情况下使用三重等号:

function gcf(a: number, b: number): number
{
    return (b == 0) ? (a) : (gcf(b, a % b));
}
Run Code Online (Sandbox Code Playgroud)

TsLint:==应该是===

我知道0是一个数字,我也知道b是一个数字(否则我会得到一个编译错误).那么为什么我要在这种情况下使用三重等号?

bas*_*rat 22

类型无法使您免于由此引起的所有错误==.特别是因为undefinednull可以兼容所有类型.例如,以下是不正确的:

var foo:number = null; 

if (foo == undefined) { 
    console.log('is undefined'); // actually null  
}
Run Code Online (Sandbox Code Playgroud)

有关为何这些是平等的更多信息,请访问/sf/answers/25165661/

个人:我已禁用此规则,从未遇到任何问题.我不比较true/false/null/undefined,只是if他们.打字稿会阻止比较strings,numbers因此这不是我需要处理的错误.


Dar*_*ter 6

使用三重等式运算符还可以节省您从外部文件(即TypeScript环境之外)调用结果Javascript的情况.纯粹的JS文件不是由tslint处理的,并且通过"要求"三重相等,tslint使得生成的Javascript文件更具弹性.