Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 使TypeScript函数接受Redux连接的组件_Reactjs_Typescript_React Native_Redux - Fatal编程技术网

Reactjs 使TypeScript函数接受Redux连接的组件

Reactjs 使TypeScript函数接受Redux连接的组件,reactjs,typescript,react-native,redux,Reactjs,Typescript,React Native,Redux,我有一个React原生项目,其中我有一个屏幕类,和主屏幕,MyProfileScreen类,这些类都是从中派生出来的(我知道,组合优先于继承,但让我们把这个论点保留在其他地方)(对不相关的部分进行了编辑,但请注意标识符getter函数,我将谈到这一点): 到目前为止还不错,我可以使用任何屏幕类调用wrapStackNavigator,没有类型错误。现在问题开始了。我想让我的屏幕连接组件,所以我继续,像往常一样将它们连接到Redux: export default connect(mapState

我有一个React原生项目,其中我有一个
屏幕
类,和
主屏幕
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)