我想在编译器中启用noImplicitAny
标志。
我的问题是我使用的是lodash / fp,到目前为止还没有打字。
所以编译器抱怨缺少lodash / fp的定义文件。
有没有办法只允许隐式外部js文件?或者将像node_modules
这样的子目录列入白名单?
答案 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"排除的文件除外。属性。
答案 2 :(得分:0)
您可以创建一个扩展名为“ .d.ts”的声明文件,例如Environmental-modules.d.ts
在此文件中添加以下行
declare module '*';
您完成了!
现在,您仍然可以使用noImplicitAny标志的好处,而不必担心其他没有任何可用类型的js文件。
有关更多信息,您可以参考here