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

问题描述 投票:0回答:1

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

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

gettext.js软件包是使用Node.js像这样安装的:npm install gettext.js

VS代码在上面的行中显示以下错误消息:

找不到模块'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替换which you can see here文件(declare module 'gettext.js')的内容(如错误消息所建议)确实消除了错误。但这不是拥有类型的解决方案。我想念什么?

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

typescript .d.ts
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.