我有一个编译和公开两个 CommonJS 模块的项目;他们每个人都是一个对象。然后,我有另一个使用它们的项目。
项目结构如下:
multi-mod-package
|-mod1
| |-index.js
|-mod2
| |-index.js
|-package.json
multi-mod-consumer
|-index.ts
|-package.json
|-tsconfig.json
和文件内容:
多模块包/mod1/index.js
module.exports.default = {
"count": "One"
};
多模块包/mod2/index.js
module.exports.default = {
"count": "Two"
};
多模式消费者/index.ts
import one from "multi-mod-package/mod1";
import two from "multi-mod-package/mod2";
console.log(`${one.count}, ${two.count}, Buckle My Shoes`);
多模式消费者/tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": true
},
"include": [
"index.ts"
]
}
没有noImplicitAny
,这工作正常。项目编译,并按One, Two, Buckle My Shoes
预期输出。但是,这些模块没有类型。我想noImplicitAny
为这些模块启用并拥有正确的类型,所以我试图为每个模块编写声明文件。我已经尝试了 and 的多次迭代declare module
,declare namespace
但是在尝试使用模块时,我不断收到“...不是模块”错误。
如何为导出对象的模块编写声明文件?
更新
添加两个定义文件 -multi-mod-package/mod1/index.d.ts
和- 分别multi-mod-package/mod1/index.d.ts
包含内容declare module "multi-mod-package/mod1";
和declare module "multi-mod-package/mod1";
- 消除“...不是模块”错误。但是,仍然没有正确的打字;one.count
仍然作为 type 出现any
。
当我尝试为模块提供一个主体(即使只是一个空的)时,TypeScript 抱怨该模块没有默认导出。所以,我仍然需要一个解决方案来告诉 TypeScript 模块是一个包含该count
属性的对象。