TypeScript在Javascript源代码中使用noImplicitAny

TypeScript在Javascript源代码中使用noImplicitAny,javascript,typescript,typescript-typings,Javascript,Typescript,Typescript Typings,我想在编译器中启用noImplicitAny标志。 我的问题是我使用lodash/fp,到目前为止还没有打字 因此,编译器抱怨缺少lodash/fp的定义文件 有没有一种方法只允许外部js文件使用隐式any?或者将一个子目录(如node\u modules?)列入白名单,我解决这一问题的方法是创建一个文件,在其中声明我要使用的没有键入的模块。例如,我将创建一个名为modules.ts的文件,其中有一个我想要使用的模块:声明模块“模块名称”。现在,在任何我想使用非类型模块的文件上,我可以简单地导入

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

因此,编译器抱怨缺少lodash/fp的定义文件


有没有一种方法只允许外部js文件使用隐式any?或者将一个子目录(如
node\u modules

)列入白名单,我解决这一问题的方法是创建一个文件,在其中声明我要使用的没有键入的模块。例如,我将创建一个名为
modules.ts
的文件,其中有一个我想要使用的模块:
声明模块“模块名称”
。现在,在任何我想使用非类型模块的文件上,我可以简单地导入我的
modules.ts
,然后使用
import*作为
语法导入我想使用的模块。这样做的目的是将其从隐式any更改为显式any,但这当然不会为这些模块提供打字,它只允许您使用它们

在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)文件,但使用“排除”属性排除的文件除外


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

在此文件中添加以下行

declare module '*';
你完了

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


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

,这会否定模块可能具有的任何类型吗?tsconfig仅用于编译时。这会告诉编译器在编译到JS时忽略node_modules文件夹。我也希望使用此选项…我有一个正在转换的大型项目,我希望启用noImplicitAny,但也允许在JS源文件中使用它。。