繁体   English   中英

模块导出对象声明

[英]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"
};

多种消费/ 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 moduledeclare namespace的迭代,但是在尝试使用模块时,我不断收到“ ...不是模块”错误。

如何为导出对象的模块编写声明文件?

更新

添加两个定义文件multi-mod-package/mod1/index.d.tsmulti-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的位置解析的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM