我正在开发一个使用打字的项目,我现在需要从@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 for的特定库是leaflet,index.d.ts的开头行是:
export as namespace L;
当我在我的一个TS源文件中输入'L'时,编译器找不到它。
我一定做错了,是否可以使用打字和@types存储库中的各种类型?
最终我们应该转移到只使用@types,但我想弄清楚为什么我不能在我的编辑器中检测到这个特定的传单@type(我使用的是VS Code,如果相关的话)
答案 0 :(得分:0)
默认情况下,所有可见的“@types”包都包含在您的编译中。任何封闭文件夹的node_modules / @类型中的包被视为可见;具体而言,这意味着包装在./node_modules/@types/,../node_modules/@types/,../../node_modules/@types/等。
如果指定了typeRoots,则仅包含typeRoots下的包。例如:
所以第一步就是删除你typeRoots
并查看传单类型是否被选中(在此阶段你的typings/index.d.ts
可能会收到错误。
如果Leaflet有效(手指越过它),那么你需要在这里检查你的路径node_modules
...
"typeRoots" : ["./typings/index.d.ts", "../../node_modules/@types"],
特别是,我想知道这些路径是否受到文件中rootDir
配置的影响?