【问题标题】:How to solve the "Could not find a declaration file for module" error using my own declaration file?如何使用我自己的声明文件解决“找不到模块的声明文件”错误?
【发布时间】:2020-07-30 04:55:15
【问题描述】:

我有一个测试项目,我在其中测试类型定义文件。该项目有一个名为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 文件夹的内容复制到其中。我还在我的tsconfig.json 文件中添加了一个typeRoots 条目,所以它看起来像这样:

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

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

PS:我对使用ts-ignore 或将noImplicitAny 设置为false 等黑客解决方案不感兴趣。

【问题讨论】:

  • 如果我没记错的话,你需要做的就是在你的src目录中的某个地方添加一个名为gettext.js.d.ts的文件,它会被VS Code和TS拾取。跨度>
  • @Greg:谢谢。我刚刚试过了,没有效果。

标签: typescript .d.ts


【解决方案1】:

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

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

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

【讨论】:

  • 我遇到了同样的问题,baseUrl 似乎没有帮助。有什么想法吗?
  • @Bassem 不是真的。我认为您应该发布一个包含所有信息的新问题,并附上该问题的链接。
  • 谢谢!我已经stackoverflow.com/questions/67408876/…了,你能回答吗?
猜你喜欢
  • 2018-10-25
  • 2019-11-17
  • 1970-01-01
  • 2017-08-13
  • 2017-06-28
  • 2021-01-02
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多