我有一个测试项目,正在其中测试类型定义文件。该项目有一个名为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
。
我通过设置baseUrl
编译器选项解决了这个问题。有趣的是,我现在完全不需要typeRoots
选项来编译并成功运行。这是新的tsconfig.json
文件:
{
"compilerOptions": {
"lib": ["ES2017"],
"module": "commonjs",
"strict": true,
"target": "es5",
"baseUrl": "./types"
},
"files": ["tests.ts"]
}
我希望这可以帮助遇到相同问题的人。