我有一个测试项目,正在其中测试类型定义文件。该项目有一个文件名为index.ts
看起来像这样:
import i18nFu = require("gettext.js");
The 获取文本.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
file (你可以在这里看到 https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/gettext.js/index.d.ts) with declare module 'gettext.js'
(如错误消息所示)确实消除了错误。但这不是拥有类型的解决方案。我缺少什么?
PS:我对解决黑客解决方案不感兴趣,例如使用ts-ignore
或设置noImplicitAny
to false
.