typescript - 已安装的 @types 类型定义未被 TS 编译器识别
我正在做一个项目,该项目一直在使用 typings,现在我需要从 @types 仓库安装一个定义。
我已经安装了 @type,并在我的 node_modules\@types 文件夹中看到了它,但我的 TS 编译器没有识别这些类型。
我们的 tsconfig.json 如下:
{
"compilerOptions": {
"target": "es5",
"sourceMap": true,
"outDir": "./dist",
"rootDir": "../",
"noImplicitAny": false,
"noImplicitThis": false,
"noUnusedLocals": false,
"noUnusedParameters": false,
"pretty": true,
"removeComments": false,
"allowUnreachableCode": false,
"declaration": false,
"allowJs": true,
"module": "commonjs",
"typeRoots" : ["./typings/index.d.ts", "../../node_modules/@types"],
},
"include": [
"./typings/index.d.ts",
"./app/**/*.module.ts",
"./app/**/*.run.ts",
"./app/**/*.routes.ts",
"./app/**/*.enum.ts",
"./app/**/*.controller.ts",
"./app/**/*.model.ts",
"./app/**/*.directive.ts",
"./app/**/*.component.ts",
"./app/**/*.filter.ts",
"./app/**/*.service.ts",
"./app/interfaces/**/*.ts"
],
"exclude": [
"dist",
"node_modules"
]
}
请注意,我们的 tsconfig 并不位于项目的根目录,而是在如下的子目录中
我在 typeRoots 中添加了一个额外的路径,指向项目的 node_modules 目录,但这没有任何区别。
我安装了 @types 的特定库是 leaflet,他们的 index.d.ts 的开头行是:
export as namespace L;
当我在我的一个 TS 源文件中输入 'L' 时,编译器找不到它。
我一定做错了什么,有可能同时使用 typings 和 @types 仓库中的类型吗?
最终我们应该过渡到只使用 @types,但我想弄清楚为什么我在编辑器中无法检测到这个特定的 leaflet @type(我使用的是 VS Code,以防这有关系)
答案#1
默认情况下,所有可见的“@types”包都会被包含在您的编译中。任何包含文件夹的 node_modules/@types 中的包都被视为可见;具体来说,这意味着 ./node_modules/@types/、../node_modules/@types/、../../node_modules/@types/ 等目录下的包。
如果指定了 typeRoots,则只有 typeRoots 下的包会被包含。例如:
所以第一步是移除你的 typeRoots,看看是否能够检测到 Leaflet 类型(在这个阶段,你可能会收到关于 typings/index.d.ts 的错误)。
如果 Leaflet 能正常工作(希望它能),那么你需要在这里检查回到 node_modules 的路径...
"typeRoots" : ["./typings/index.d.ts", "../../node_modules/@types"],
尤其是,我想知道这些路径是否会受到你文件中 rootDir 配置的影响?
