反应导航:如何在打字稿中使用 NavigationStackScreenComponent 类型传递 redux 道具

Posted

技术标签:

【中文标题】反应导航:如何在打字稿中使用 NavigationStackScreenComponent 类型传递 redux 道具【英文标题】:react navigation: how to pass redux props with NavigationStackScreenComponent type in typescript 【发布时间】:2020-05-13 21:48:41 【问题描述】:

我开始在我的 react native 项目(typescript 新手)中使用 typescript,并在使用 typescript 的功能组件中遇到了 navigationOptions 问题,感谢这篇文章 here 我解决了这个问题,但是当我尝试传递 redux 道具时它告诉我

Property 'authType' does not exist on type 'PropsWithChildren<NavigationStackScreenProps<Params, Props>>

这是我的代码

interface Props 
 authType: string;


interface Params 
 routeName: string;


const Customer: NavigationStackScreenComponent<Params, Props> = (
 navigation,
 authType,
 ) => 
 .... Component
 

 Customer.navigationOptions = ( navigation ) => (
   title: navigation.getParam('routeName'),
 );

我认为这意味着我正在传递的道具没有被读取,尽管我正在传递它。

我使用 NavigationStackScreenComponent 是为了能够使用

Customer.navigationOptions etc

否则它会告诉我

ts] Property 'navigationOptions' does not exist

我真的开始爱上打字稿了,知道如何使用 authType Props 而不会让我尖叫吗?

【问题讨论】:

【参考方案1】:

我最终这样做了

type Params = 
  routeName: string;
;

type Props = 
  authType?: string;
  navigation: NavigationStackProp;
;

const Customer: NavigationStackScreenComponent<Params> = (
  authType,
  navigation,
: Props) => 

我只是将传递道具设为可选。

【讨论】:

【参考方案2】:

你需要做类似的事情

interface Props 
 authType: string;


type CustomerType = React.ComponentType<Props & NavigationStackScreenProps> &  navigationOptions: NavigationStackOptions | ((props: NavigationStackScreenProps) => NavigationStackOptions) 

const Customer: CustomerType = (
 navigation,
 authType,
) => 
 .... Component

【讨论】:

它有效,但我们又回到了原点告诉我Property 'navigationOptions' does not exist on type 'FunctionComponent&lt;Props &amp; NavigationStackScreenProps&lt;Params, unknown&gt;&gt;'

以上是关于反应导航:如何在打字稿中使用 NavigationStackScreenComponent 类型传递 redux 道具的主要内容,如果未能解决你的问题,请参考以下文章

navigation.navigate('Home') 在打字稿中显示一些错误

如何使用打字稿中的反应钩子设置graphql数据?

如何在反应打字稿中从json文件中获取和显示数据

React Navigation v6 NavigationContainer 链接属性与嵌套导航打字稿问题

在打字稿中返回反应 16 个数组元素

打字稿:类型上不存在属性“导航”省略反应导航v5