我有一个实现React组件的TypeScript库。可选功能之一是您可以将Redux存储的实例作为道具传递给组件以进行Redux集成。
<Component reduxStore={store}></Component>
这是一个可选的道具,该库仅从Store
Redux包中导入类型以强制执行类型。我图书馆的不使用Redux的消费者将永远不需要这种依赖,并且不应将其捆绑在最终版本中。
目前,我将Redux软件包作为软件包提供,dependency
这会引起一些问题。在Redux中,Store
类型包含在包中,但是在Redux库的最新版本中类型已更改。这意味着使用我的库和TypeScript并安装了自己的Redux版本作为依赖项的用户可能会遇到库中安装的类型信息与库中安装的相同类型之间的类型不匹配。
将依赖关系列为对等依赖关系似乎是一个好例子,但它是可选功能,如果不打算使用集成功能,则不需要库的使用者安装Redux。
是否有更好的方法来处理库的类型信息,以便在依赖版本之间进行小的类型更改不会为我的库的使用者抛出类型不匹配错误?
我想到的两个可能的解决方案可能是:
reduxStore
可选的prop设置为type any
,并在使用dispatch
预期使用的方法之前进行Store
空引用检查。这可能有效,但是会降低在构建时捕获错误的能力。Store
接口,该接口仅强制执行我计划使用的方法的一小部分。我的建议是提供一个接受通用的可选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] 删除。
我来说两句