TypeScript中是否有一个选项使编译后的JavaScript文件与JSHint兼容?



考虑下面的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仍然抛出警告)。

这根本不可能!TypeScript从来都不是为了创建与过滤器兼容的代码而构建的。当使用TypeScript时,你必须把生成的JavaScript当成字节码。没有理由看你的字节码。

一些linter甚至可能会因为this的错误使用而困扰您。实际上,在ES5中应该非常小心地使用。但是当使用TypeScript/ES2015类定义时,你需要大量使用this,并且编译到ES5会创建大量的类定义。因此,创建与你的过滤器匹配的代码将迫使你不要使用TypeScript的很多特性。

所以如果你想检测字节码,那么你应该写字节码;)

这不是编译器的错。

a == nulla === null在TypeScript和JavaScript中都不同。

a == null在a为null或undefined时返回true,而a === null只在a为null时返回true。

除了检测生成的文件,你还可以使用tslint等工具检测TypeScript文件本身。甚至有一个gulp包装器可以集成到你的构建链中。

TLDR外卖:

如果你正在为自己或团队寻找一个非常高的标准,JSLint。但它不一定是标准,只是一个标准,其中一些是JavaScript之神Doug Crockford武断地提出的。如果你想更灵活一点,或者你的团队中有一些不接受JSLint观点的老专家,或者经常在JavaScript和其他c族语言之间来回切换,那么试试JSHint吧。

长版:

fork背后的原因很好地解释了为什么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/

所以我猜这个想法是"社区驱动"而不是克罗克福德驱动。实际上,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代码非常好看,我不同意的唯一困难的特性是它不允许在一个函数中声明多个var和for循环var I = 0声明,以及函数声明中的一些空格强制。

JSLint强制的一些空白内容,我发现不一定是坏的,但与家族中其他语言(C, Java, Python等)的一些相当标准的空白约定不同步,这些约定在JavaScript中也经常被遵循。由于我每天都在用不同的语言写作,并且与不喜欢在代码中使用lint风格的空白的团队成员一起工作,所以我发现JSHint是一种很好的平衡。它可以捕获合法的错误或非常糟糕的形式,但不会像JSLint那样对我咆哮(有时,以我无法禁用的方式),因为我不关心的风格观点或语法错误。

许多优秀的库都是不可lint的,这对我来说证明了JSLint只是简单地推送一个版本的"好代码"(这确实是好代码)的想法是有道理的。但是,同样的库(或其他好的库)可能也不支持提示,所以,请使用touch .

坦率而简单地说:

你所要求的是不可能的。让我明确一点:不可能。除非你想重新设计整个系统

最新更新