仅对TypeScript类型有可选的对等依赖项?

安德鲁·克拉斯威尔

我有一个实现React组件的TypeScript库。可选功能之一是您可以将Redux存储的实例作为道具传递给组件以进行Redux集成。

<Component reduxStore={store}></Component>

这是一个可选的道具,该库仅从StoreRedux包中导入类型以强制执行类型。我图书馆的不使用Redux的消费者将永远不需要这种依赖,并且不应将其捆绑在最终版本中。

目前,我将Redux软件包作为软件包提供,dependency这会引起一些问题。在Redux中,Store类型包含在包中,但是在Redux库的最新版本中类型已更改。这意味着使用我的库和TypeScript并安装了自己的Redux版本作为依赖项的用户可能会遇到库中安装的类型信息与库中安装的相同类型之间的类型不匹配。

将依赖关系列为对等依赖关系似乎是一个好例子,但它是可选功能,如果不打算使用集成功能,则不需要库的使用者安装Redux。

是否有更好的方法来处理库的类型信息,以便在依赖版本之间进行小的类型更改不会为我的库的使用者抛出类型不匹配错误?

我想到的两个可能的解决方案可能是:

  1. reduxStore可选的prop设置为type any,并在使用dispatch预期使用的方法之前进行Store空引用检查。这可能有效,但是会降低在构建时捕获错误的能力。
  2. 也许有一种方法可以创建我自己的自定义Store接口,该接口仅强制执行我计划使用的方法的一小部分。
  3. 为那些想与Redux集成以封装核心组件的人创建一个单独的软件包...从结构上来说,这可能是一个巨大的麻烦。
安德鲁

我的建议是提供一个接受通用的可选HOC。您的用户可以用它包装您的组件。您关心的是不同的类型版本和绑定的依赖项。这意味着您别无选择,只能让用户决定他们使用什么类型。

const useStore:<Store = any> = (store: Store) => WrappedComponent => {
   return (props) => <WrappedComponent {...props} store={store} />
}

其在组件中的实现如下所示:

import {Store} from 'react-redux
useStore<Store>(store)(Component)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章