我正在将我的反应组件库react-esri-leaflet转换为打字稿。该库要求用户安装 react-leaflet 作为 peerDependency,它提供对 react-leaflet 版本 3 (RLV3) 和 react-leaflet 版本 2 (RLV2) 的支持。对于默认组件,我可以简单地做
import { createLayerComponent } from 'react-leaflet'
但是如果用户想要使用与 RLV2 兼容的组件,他们可以单独导入这些组件(请随意查看库文档以了解如何使用)。大多数 RLV2 组件都以类似的开头
import { withLeaflet, MapControl } from 'react-leaflet'
在转换为打字稿时,这会引发错误。在开发这个库时,我安装的 react-leaflet 安装了最新版本。withLeaflet
并且MapControl
不再存在于该版本中。
为了解决这个问题,我遵循了“Node 应用程序中相同 npm 包的两个版本”的答案中的建议。这使我可以通过将 RLV2 别名为 来将 RLV2 视为源代码中的一个单独的包,'react-leaflet-v2'
我可以这样做
import { withLeaflet, MapControl } from 'react-leaflet-v2'
太好了,现在打字稿很高兴,我可以将适当版本的 react-leaflet 导入适当的组件,并且打字是正确的。但是,当我使用 编译回 js 时tsc
,我的 V2 组件中使用的包名称仍然是'react-leaflet-v2'
.
问题是该库的最终用户将使用RLV2或 RLV3,并且将'react-leaflet'
在他们的项目中简单地调用它。库的编译文件需要能够找到'react-leaflet'
,而不是某个别名,无论它们使用的是什么版本。
如何在两个依赖版本的开发中保持类型安全,但让我的用户不用担心,这意味着只需安装他们想要使用的 react-leaflet 版本,从库中导入正确的组件,并拥有组件在他们的项目中找到'react-leaflet'
依赖项?编译时是否可以告诉tsc
重命名?还有其他解决方案吗?'react-leaflet-v2'
'react-leaflet'