TSLint双重vs三重平等

时间:2014-03-29 15:07:10

标签: typescript equality

我知道单个等号意味着分配;双重意味着平等;和三重意味着平等和相同的类型。

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

function gcf(a: number, b: number): number
{
    return (b == 0) ? (a) : (gcf(b, a % b));
}
  

TsLint:==应该是===

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

2 个答案:

答案 0 :(得分:21)

类型无法避免因==导致的所有错误。特别是因为undefinednull所有类型兼容。例如以下是不正确的if:

var foo:number = null; 

if (foo == undefined) { 
    console.log('is undefined'); // actually null  
}

有关这些原因相等的更多信息https://stackoverflow.com/a/359509/95190

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

答案 1 :(得分:6)

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