考虑以下TypeScript代码示例。
var checkEqual = function (a:any, b:any) {
if(a == null)
{
return false;
}
}
当我编译它时,它将生成相应的JavaScript文件而没有任何编译时错误,如下所示:
var checkEqual = function (a, b) {
if (a == null) {
return false;
}
};
但是当我在编译的JavaScript代码/文件上运行JSHint时,我会有以下错误/警告:
使用===与null进行比较
我希望TypeScript中编译的JavaScript代码与JSHint兼容(不存在任何错误和警告)。这意味着要么应该生成正确的代码,要么应该给出编译时错误。
PS:我以前不知道tslint,但即使在使用它之后,它也没有编译与JSHint兼容的JavaScript(JSHint仍在抛出警告)。答案 0 :(得分:8)
根本不可能!从来没有构建TypeScript,目的是创建符合linter的代码。使用TypeScript时,您必须将生成的JavaScript视为字节码。没有理由查看你的字节码。
有些短信甚至可能会因为this
的使用有问题而烦恼。事实上,在ES5中应该非常谨慎地使用它。但是当使用TypeScript / ES2015类定义时,你需要经常使用this
,并且转换到ES5会创建很多。因此,创建与您的linter匹配的代码将迫使您不使用TypeScript的许多功能。
因此,如果你想要lint字节码,那么你应该写字节码;)
答案 1 :(得分:3)
这不是编译器的错误。
a == null
与TypeScript和JavaScript中的a === null
不同。
a == null
将返回true,但如果a为null,则a === null
将仅返回true。
答案 2 :(得分:2)
您可以使用tslint等工具,而不是使用生成的文件进行lint,而不是自己使用TypeScript文件。甚至还有一个gulp包装器可以集成到您的构建链gulp-tslint中。
答案 3 :(得分:-1)
坦白而简单:
你问的是不可能的。让我绝对清楚:不可能。除非您想重新设计整个系统。
答案 4 :(得分:-1)
TLDR外卖:
如果您正在为自己或团队寻找一个非常高的标准,JSLint。但它不一定是标准,只是 a 标准,其中一些标准性地来自一个名叫Doug Crockford的JavaScript神。如果你想要更灵活,或者你的团队中有一些老东西没有购买JSLint的意见,或者在JavaScript和其他C系列语言之间来回定期,那么试试JSHint。 / p>
长版:
分叉背后的原因很好地解释了为什么JSHint存在:
http://badassjs.com/post/3364925033/jshint-an-community-driven-fork-of-jslint http://anton.kovalyov.net/2011/02/20/why-i-forked-jslint-to-jshint/
所以我想这个想法是“社区驱动的”而非Crockford驱动的。实际上,JSHint通常对JSLint的一些风格和轻微的语法“意见”更加宽容(或者至少是可配置的或不可知的)。
例如,如果您认为下面的A和B都很好,或者您想要编写具有A中一个或多个B方面的代码,则JSHint适合您。如果你认为B是唯一正确的选择...... JSLint。我确信还有其他差异,但这突出了一些。
A)开箱即用JSHint - JSLint失败
(function() {
"use strict";
var x=0, y=2;
function add(val1, val2){
return val1 + val2;
}
var z;
for (var i=0; i<2; i++){
z = add(y, x+i);
}
})();
B) Passes Both JSHint and JSLint
(function () {
"use strict";
var x = 0, y = 2, i, z;
function add(val1, val2) {
return val1 + val2;
}
for (i = 0; i < 2; i += 1) {
z = add(y, x + i);
}
}());
我个人认为JSLint代码非常好看,而且我不同意它的唯一硬性特征是它在函数和for-loop var i = 0声明中对多个var声明的仇恨,以及一些功能声明的空白强制执行。
JSLint强制执行的一些空白内容,我发现不一定是坏的,但与家庭中其他语言(C,Java,Python等等)的一些非常标准的空白约定不同步,它们通常也被视为JavaScript中的约定。由于我在一天中使用各种语言编写,并且与不喜欢我们代码中的lint风格空格的团队成员合作,我发现JSHint是一个很好的平衡点。它捕捉的是一个合法的错误或非常糟糕的形式的东西,但不会像JSLint那样咆哮我(有时候,我无法禁用)对于我不关心的风格观点或句法挑剔。
许多好的库都不是lint'able,这对我来说证明了一些JSLint只是推送一个版本的“好代码”(这确实是好代码)的想法是有道理的。 )。但话说回来,相同的图书馆(或其他好的图书馆)可能也不是暗示,所以,触摸。