【发布时间】: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