模块导出对象声明
Declaration for Module Exporting Object
我有一个编译和公开两个 CommonJS 模块的项目;他们每个人都是一个对象。然后,我有另一个消耗它们的项目。
项目结构如下:
multi-mod-package
|-mod1
| |-index.js
|-mod2
| |-index.js
|-package.json
multi-mod-consumer
|-index.ts
|-package.json
|-tsconfig.json
文件内容:
multi-mod-package/mod1/index.js
module.exports.default = {
"count": "One"
};
multi-mod-package/mod2/index.js
module.exports.default = {
"count": "Two"
};
multi-mod-consumer/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`);
multi-mod-consumer/tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": true
},
"include": [
"index.ts"
]
}
没有 noImplicitAny
,这工作正常。项目编译,并按预期输出 One, Two, Buckle My Shoes
。但是,模块没有类型。我想启用 noImplicitAny
并对这些模块进行适当的输入,因此我尝试为每个模块编写声明文件。我已经尝试了 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
仍然显示为类型 any
。
当我尝试为模块提供主体(即使只是一个空主体)时,TypeScript 抱怨该模块没有默认导出。所以,我仍然需要一个解决方案来告诉 TypeScript 模块是一个包含 count
属性.
的对象
您需要将子模块声明为单独的模块。
在您的输入中(例如 typings/multi-mod-package.d.ts
):
declare module 'multi-mod-package/mod1' {
// typings for mod1
}
declare module 'multi-mod-package/mod2' {
// typings for mod2
}
打字怎么写,可以看手册:
https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html
TypeScript 不进行自动深度链接,因为深度链接的节点解析可能与类型结构不同。
节点深度链接根据 package.json 的位置解析。
我有一个编译和公开两个 CommonJS 模块的项目;他们每个人都是一个对象。然后,我有另一个消耗它们的项目。
项目结构如下:
multi-mod-package
|-mod1
| |-index.js
|-mod2
| |-index.js
|-package.json
multi-mod-consumer
|-index.ts
|-package.json
|-tsconfig.json
文件内容:
multi-mod-package/mod1/index.js
module.exports.default = {
"count": "One"
};
multi-mod-package/mod2/index.js
module.exports.default = {
"count": "Two"
};
multi-mod-consumer/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`);
multi-mod-consumer/tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": true
},
"include": [
"index.ts"
]
}
没有 noImplicitAny
,这工作正常。项目编译,并按预期输出 One, Two, Buckle My Shoes
。但是,模块没有类型。我想启用 noImplicitAny
并对这些模块进行适当的输入,因此我尝试为每个模块编写声明文件。我已经尝试了 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
仍然显示为类型 any
。
当我尝试为模块提供主体(即使只是一个空主体)时,TypeScript 抱怨该模块没有默认导出。所以,我仍然需要一个解决方案来告诉 TypeScript 模块是一个包含 count
属性.
您需要将子模块声明为单独的模块。
在您的输入中(例如 typings/multi-mod-package.d.ts
):
declare module 'multi-mod-package/mod1' {
// typings for mod1
}
declare module 'multi-mod-package/mod2' {
// typings for mod2
}
打字怎么写,可以看手册:
https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html
TypeScript 不进行自动深度链接,因为深度链接的节点解析可能与类型结构不同。
节点深度链接根据 package.json 的位置解析。