首页 > 解决方案 > 如何使用我自己的声明文件解决“找不到模块的声明文件”错误?

问题描述

我有一个测试项目,我正在测试类型定义文件。该项目有一个名为的文件index.ts,如下所示:

import i18nFu = require("gettext.js");

gettext.js包是使用 Node.js 安装的,如下所示:npm install gettext.js

VS Code 为上面的行显示以下错误消息:

找不到模块“gettext.js”的声明文件。

'SOME_PATH/gettext.js' 隐含了一个 'any' 类型。

如果存在,请尝试 'npm install @types/gettext.js' 或添加包含“declare module 'gettext.js';”的新声明 (.d.ts) 文件

安装@types/gettext.js模块确实可以解决问题。但我很好奇,所以我并没有就此止步。我再次删除了@types/gettext.js模块并尝试自己创建声明文件。

我在我的项目文件夹中创建了一个名为的子types/gettext.js文件夹,并将旧node_modules/@types/gettext.js文件夹的内容复制到其中。我还在typeRoots我的文件中添加了一个条目,tsconfig.json所以它看起来像这样:

{
    "compilerOptions": {
        "lib": ["ES2017"],
        "module": "commonjs",
        "strict": true,
        "target": "es5",
        "typeRoots": ["./types", "./node_modules/@types"],
    },
    "files": ["test.ts"]
}

但错误信息不会消失。将文件的内容types/gettext.js/index.d.ts您可以在此处看到)替换declare module 'gettext.js'为(如错误消息所建议的那样)确实消除了错误。但这不是拥有类型的解决方案。我错过了什么?

PS:我对使用ts-ignore或设置noImplicitAnyfalse.

标签: typescript.d.ts

解决方案


baseUrl我通过设置编译器选项解决了这个问题。有趣的是,我现在根本不需要该typeRoots选项来成功编译和运行。这是新tsconfig.json文件:

{
    "compilerOptions": {
        "lib": ["ES2017"],
        "module": "commonjs",
        "strict": true,
        "target": "es5",
        "baseUrl": "./types"
    },
    "files": ["tests.ts"]
}

我希望这可以帮助遇到同样问题的人。


推荐阅读