Reactjs 使TypeScript函数接受Redux连接的组件
我有一个React原生项目,其中我有一个Reactjs 使TypeScript函数接受Redux连接的组件,reactjs,typescript,react-native,redux,Reactjs,Typescript,React Native,Redux,我有一个React原生项目,其中我有一个屏幕类,和主屏幕,MyProfileScreen类,这些类都是从中派生出来的(我知道,组合优先于继承,但让我们把这个论点保留在其他地方)(对不相关的部分进行了编辑,但请注意标识符getter函数,我将谈到这一点): 到目前为止还不错,我可以使用任何屏幕类调用wrapStackNavigator,没有类型错误。现在问题开始了。我想让我的屏幕连接组件,所以我继续,像往常一样将它们连接到Redux: export default connect(mapState
屏幕
类,和主屏幕
,MyProfileScreen
类,这些类都是从中派生出来的(我知道,组合优先于继承,但让我们把这个论点保留在其他地方)(对不相关的部分进行了编辑,但请注意标识符
getter函数,我将谈到这一点):
到目前为止还不错,我可以使用任何屏幕类调用wrapStackNavigator
,没有类型错误。现在问题开始了。我想让我的屏幕连接组件,所以我继续,像往常一样将它们连接到Redux:
export default connect(mapStateToProps, mapDispatchToProps, mergeProps)(HomeScreen)
此时,调用wrapStackNavigator
开始抱怨类型不兼容。我知道原因:connect
返回另一个包装原始类的类型,但我不知道如何修复它。我已尝试将wrapStackNavigator
更改为接受ConnectedComponent
或推断ableComponentEnhancerWithProps
(显然是connect
返回的)但无效(或者我的类型参数有误)
如何使
wrapStackNavigator
接受从Screen
派生的类,或从Screen
派生的connect
ed类,同时仍然能够访问传递的派生Screen
类的静态属性,而不存在键入错误?(请不要向<代码> > < <代码> >,我知道它会“解决”它,但我不认为它是一个解决方案。。我使用的是TypeScript 3.6.3。会在你使用的地方工作吗?@timotgl我一直在尝试让它工作,但找不到方法。也许会发布你尝试过的内容?期待一种或另一种类型应该是常见的用例。患者:我这样做会很痛。医生:不要使用TypeScript。对不起,我只是觉得TypeScript的宣传太过了这是好处,但低估了成本。可能在发布库时使用,但在构建应用程序时不使用。@MkeSpaGuy对此肯定有不同意见。我无法想象在没有适当的强类型支持的情况下编写应用程序。
export default class HomeScreen extends Screen<HomeScreenProps & HomeScreenDispatchProps>{
[...]
}
export default function wrapStackNavigator<T extends typeof Screen>(screen:T){
return <Stack.Navigator>
<Stack.Screen name={screen.identifier} component={screen}/>
</Stack.Navigator>
}
export default connect(mapStateToProps, mapDispatchToProps, mergeProps)(HomeScreen)