typescript - 如何使用我自己的声明文件解决“找不到模块的声明文件”错误?
问题描述
我有一个测试项目,我正在测试类型定义文件。该项目有一个名为的文件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
或设置noImplicitAny
为false
.
解决方案
baseUrl
我通过设置编译器选项解决了这个问题。有趣的是,我现在根本不需要该typeRoots
选项来成功编译和运行。这是新tsconfig.json
文件:
{
"compilerOptions": {
"lib": ["ES2017"],
"module": "commonjs",
"strict": true,
"target": "es5",
"baseUrl": "./types"
},
"files": ["tests.ts"]
}
我希望这可以帮助遇到同样问题的人。
推荐阅读
- html - 我如何使用 Jinja2 和 HTML 设置联系表单的样式
- oracle - Oracle PL/SQL:在变量中给定的表之间复制数据
- php - Laravel 7“找不到类'App\Http\Controllers\Validator'”
- python - FASTAPI 记录到文件
- javascript - 如何使用组向信号器中的特定用户发送消息?
- c++ - 从 Page 实例化派生类会使用 C++/WinRT 引发 CLASS_E_CLASSNOTAVAILABLE
- ruby-on-rails - 为什么我在 ruby 类/模块错误中得到 nil
- angular - 在 Angular 中测试关键指令 (9)
- sql - 我将如何从两个不同的表中选择并在 Oracle 中获得以下内容
- android - 滚动布局大于显示