是否可以发布带有环境模块声明的包?
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.json
compilerOptions.types
中指定包名称来实现上述工作,但显然我希望这种检测是自动的,无需手动配置。
【问题讨论】:
【参考方案1】:在documentation中提到,那个
如果指定了类型,则仅列出的包将包含在 全局范围。
因此,您可能已经指定了类型,这会阻止自动发现您的包@types。尝试完全删除 compilerOptions.types
【讨论】:
那是我最初的状态,但不起作用。 (顺便说一句,自定义包,所以没有 @types/* via dedicatedTyped。)以上是关于是否可以发布带有环境模块声明的包?的主要内容,如果未能解决你的问题,请参考以下文章