如何使用我自己的声明文件解决 "Could not find a declaration file for module" 错误?
How to solve the "Could not find a declaration file for module" error using my own declaration file?
我有一个测试项目,我正在其中测试类型定义文件。该项目有一个名为 index.ts
的文件,如下所示:
import i18nFu = require("gettext.js");
gettext.js 软件包是使用 Node.js 安装的,如下所示:npm install gettext.js
VS Code 显示以上行的以下错误消息:
Could not find a declaration file for module 'gettext.js'.
'SOME_PATH/gettext.js' implicitly has an 'any' type.
Try 'npm install @types/gettext.js' if it exists or add a new declaration (.d.ts) file containing "declare module 'gettext.js';"
安装 @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
.
我通过设置 baseUrl
编译器选项解决了这个问题。有趣的是,我现在根本不需要 typeRoots
选项来编译和 运行 成功。这是新的 tsconfig.json
文件:
{
"compilerOptions": {
"lib": ["ES2017"],
"module": "commonjs",
"strict": true,
"target": "es5",
"baseUrl": "./types"
},
"files": ["tests.ts"]
}
我希望这可以帮助 运行遇到同样问题的人。
我有一个测试项目,我正在其中测试类型定义文件。该项目有一个名为 index.ts
的文件,如下所示:
import i18nFu = require("gettext.js");
gettext.js 软件包是使用 Node.js 安装的,如下所示:npm install gettext.js
VS Code 显示以上行的以下错误消息:
Could not find a declaration file for module 'gettext.js'.
'SOME_PATH/gettext.js' implicitly has an 'any' type.
Try 'npm install @types/gettext.js' if it exists or add a new declaration (.d.ts) file containing "declare module 'gettext.js';"
安装 @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
.
我通过设置 baseUrl
编译器选项解决了这个问题。有趣的是,我现在根本不需要 typeRoots
选项来编译和 运行 成功。这是新的 tsconfig.json
文件:
{
"compilerOptions": {
"lib": ["ES2017"],
"module": "commonjs",
"strict": true,
"target": "es5",
"baseUrl": "./types"
},
"files": ["tests.ts"]
}
我希望这可以帮助 运行遇到同样问题的人。