安装的@types定义未被TS编译器拾取

时间:2018-01-31 15:39:26

标签: typescript typescript-typings typescript2.0

我正在开发一个使用打字的项目,我现在需要从@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并不位于项目的根目录下,而是位于子目录中,如下所示 enter image description here

我在typeRoots中添加了一个额外的路径,指向项目的node_modules目录,但这没有任何区别。

我安装@types for的特定库是leaflet,index.d.ts的开头行是:

export as namespace L;

当我在我的一个TS源文件中输入'L'时,编译器找不到它。

我一定做错了,是否可以使用打字和@types存储库中的各种类型?

最终我们应该转移到只使用@types,但我想弄清楚为什么我不能在我的编辑器中检测到这个特定的传单@type(我使用的是VS Code,如果相关的话)

1 个答案:

答案 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配置的影响?