是否可以发布带有环境模块声明的包?

Posted

技术标签:

【中文标题】是否可以发布带有环境模块声明的包?【英文标题】:Is it possible to publish a package with an ambient module declaration? 【发布时间】:2021-11-02 06:19:08 【问题描述】:

我有一个包含大量生成模块的包,这些模块都导出相同的类型(例如图标库)。

我想避免为每个模块创建一个.d.ts 文件,因为它们都是相同的。

相反,我想在包的根目录创建一个index.d.ts 文件,如下所示:

// pkg-with-many-assets/index.d.ts

declare module 'pkg-with-many-assets/*' 
    const svgPath: string;
    export default svgPath;


我发现这没有在消费应用中注册。但是,当我将文件放在使用应用程序中时,这会起作用。

是否可以创建带有环境模块声明的包?


编辑: 似乎这实际上是可能的,因为@types/simple-icons 做到了。但是,如果我要将 @types/simple-icons/index.d.ts 文件复制并粘贴到我的 node_modules 目录中的 simple-icons/index.d.ts,它就不再起作用了。

也许问题在于 TypeScript 没有读取位于 simple-icons 包根目录的 index.d.ts 文件(尽管 package.json 中有 "types": "index.d.ts" 规范)。

我设法通过在tsconfig.jsoncompilerOptions.types 中指定包名称来实现上述工作,但显然我希望这种检测是自动的,无需手动配置。

【问题讨论】:

【参考方案1】:

在documentation中提到,那个

如果指定了类型,则仅列出的包将包含在 全局范围。

因此,您可能已经指定了类型,这会阻止自动发现您的包@types。尝试完全删除 compilerOptions.types

【讨论】:

那是我最初的状态,但不起作用。 (顺便说一句,自定义包,所以没有 @types/* via dedicatedTyped。)

以上是关于是否可以发布带有环境模块声明的包?的主要内容,如果未能解决你的问题,请参考以下文章

虚拟环境中没有名为“bs4”的模块

buildroot 添加带有子模块的包

环境模块声明不能指定相对模块名称

在系统verilog接口内声明的包

全局范围的扩充只能直接嵌套在外部模块或环境模块声明中 (2669)

各种环境的安装