【问题标题】:Installed @types definition not being picked up by TS compilerTS 编译器未拾取已安装的 @types 定义
【发布时间】:2018-07-10 18:51:57
【问题描述】:

我正在处理一个一直在使用类型的项目,我现在需要从 @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 的特定库是传单,其 index.d.ts 的开头行是:

export as namespace L;

当我在我的一个 TS 源文件中键入“L”时,编译器没有找到它。

我一定是做错了什么,是否可以混合使用类型和 @types 存储库中的类型?

最终我们应该转而只使用@types,但我想弄清楚为什么我无法在我的编辑器中检测到这个特定的传单@type(我正在使用 VS Code,以防万一)

【问题讨论】:

    标签: typescript typescript-typings typescript2.0


    【解决方案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配置的影响?

    【讨论】:

    • 感谢@Fenton,使用我当前的配置,我意识到我实际上能够获取从传单 index.d.ts 文件中导出的接口和类,它们只是没有被包装在文件第一行定义的“L”命名空间中。
    • 您希望它是一个全局的L,还是从Leaflet 导入L
    • 好吧,我希望我可以在全球范围内访问它,我确实尝试在我想要使用类型的 TS 文件中添加一个import * as L from "leaflet",但这对我没有帮助。我可能误解了如何使用@types,或者我的 tsconfig 中可能有一些错误配置?我提出了一个单独的问题,即无法访问导出的命名空间here
    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 2017-05-06
    • 2015-02-27
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 2017-05-19
    • 2019-10-04
    相关资源
    最近更新 更多