gpt4 book ai didi

带有环境 d.ts 模块的 Typescript ES6 模块语法

转载 作者:搜寻专家 更新时间:2023-10-30 20:39:21 24 4
gpt4 key购买 nike

让我们假设我有一个 50 文件模块,每个文件包含:

export class <SomeClassName> { /* content */ }

然后,我创建了一个根文件以通过重新导出所有文件来简化使用。所以它看起来像:

export * from "./src/some-class-1";
export * from "./src/some-class-2";
export * from "./src/some-class-3";
// etc

然后,我通过 TSC 运行它来做一个“通用”模块,目标是“es5”和描述符输出。

到目前为止一切顺利。我有我的 package.json名字my-module以输出的 index.js 为目标作为我的模块的入口点。所以我现在决定在另一个 typescript 项目中使用这个模块。

所以我为它安装了 npm(假装)npm install my-module这一切都引入了,所以我现在有了生成的 d.ts 文件,我有了实际的 commonjs 模块,所以我可以全部使用它。一切似乎都很好。

那么问题来了。然后我决定使用该模块:

import {SomeClass1} from 'my-module'

它在TS世界里爆炸了,它不知道是什么my-module涉及到,好像我们回过头来看输出的index.js,它不包含环境模块。

所以问题来了,普通模块在包含模块名称时通常使用 package.json 作为引用点,但是 TS 使用 d.ts 文件。所以我想好吧,我需要将我的再导出包装在 index.ts 中在一个模块中,所以我尝试:

export module "my-module" { /* all other re-exports */ }

但事实证明你只能为环境模块使用字符串模块名称,并且你只能将它们放在 d.ts 文件中,但是我的 d.ts 文件是从现有代码库生成的。

所以这是我的困境,我可以手动进去添加一个declare module "my-module我的 d.ts 的包装器,但它不是很自动化,或者我确实喜欢使用 ES6 语法的博客文章做并相对地引用文件,最终会有很多 import {blah} from "../node_modules/my-module/dist/index" ,希望我们都能同意这有点愚蠢。

所以我找不到任何其他适用于自动化世界的方法,因为当你使用 ES6 语法时,所有关于这个主题的博客文章和文档都使用相对文件导入,而不是从整个事情已经完成时导入通过 d.ts 文件编译和共享。

那么这里有没有办法用文本模块名称包装我的重新导出?或者至少告诉 index.d.ts 包含在环境模块中? (请记住,它会为项目中的每个文件输出一个 d.ts 文件,但我们只关心通过 index.d.ts 导入模块,因为它会重新导出所有内容)。

最佳答案

现在您仍然需要使用另一个工具来为您的包生成单个 .d.ts 文件。有一些工具可以做到这一点:

我个人使用的是 customized version of dts-generator它使用 tsconfig.json 并与每晚的 TypeScript 构建一起工作。您可以看到它为我的一个包生成的 .d.ts over here .

关于带有环境 d.ts 模块的 Typescript ES6 模块语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31983011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com