TypeScript使用noImplicitAny和Javascript源

时间:2017-04-24 13:38:50

标签: javascript typescript typescript-typings

我想在编译器中启用noImplicitAny标志。 我的问题是我使用的是lodash / fp,到目前为止还没有打字。

所以编译器抱怨缺少lodash / fp的定义文件。

有没有办法只允许隐式外部js文件?或者将像node_modules这样的子目录列入白名单?

3 个答案:

答案 0 :(得分:0)

我解决这个问题的方法是创建一个文件,我声明我想要使用的模块没有任何打字。例如,我会创建一个名为$(function() { var rotation = 0, scrollLoc = $(document).scrollTop(); $(window).scroll(function() { var newLoc = $(document).scrollTop(); var diff = scrollLoc - newLoc; rotation += diff, scrollLoc = newLoc; var rotationStr = "rotate(" + rotation + "deg)"; $(".rotate").css({ "-webkit-transform": rotationStr, "-moz-transform": rotationStr, "transform": rotationStr }); }); }) 的文件,并且我想要使用的模块就像我这样简单地使用:modules.ts。现在在我想要使用我的非类型模块的任何文件上,我只需导入我的declare module 'name-of-module',然后使用modules.ts语法导入我想要使用的模块。这样做是将它从隐式任意改为显式任何,但这当然不会给你这些模块的输入,它只是允许你使用它们。

答案 1 :(得分:0)

在你的tsconfig.json中你应该有以下内容:

{
    "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "noResolve": true,
    "sourceMap": true,
    "noImplicitAny": true,
    "removeComments": true,
    "experimentalDecorators": true
  },
  "exclude": [
    "node_modules"
  ]
}

这应该阻止node_modules文件夹被编译为JavaScript,因为它们很可能已经是JavaScript。

  

如果"文件"和"包括"如果未指定,编译器默认包含所有包含目录和子目录中的TypeScript(.ts,.d.ts和.tsx)文件,但使用" exclude"排除的文件除外。属性。

See the main TypeScript site here

答案 2 :(得分:0)

您可以创建一个扩展名为“ .d.ts”的声明文件,例如Environmental-modules.d.ts

在此文件中添加以下行

declare module '*';

您完成了!

现在,您仍然可以使用noImplicitAny标志的好处,而不必担心其他没有任何可用类型的js文件。

有关更多信息,您可以参考here