Typescript TypeError:navigation.navigate不是一个函数 从“React”导入React; 从“react native”导入{按钮、视图、文本}; const RegistrationScreen=(导航:任意)=>{ 返回( 我的注册页面 导航。导航(“主屏幕”)}> ); }; 导出默认注册屏幕;

Typescript TypeError:navigation.navigate不是一个函数 从“React”导入React; 从“react native”导入{按钮、视图、文本}; const RegistrationScreen=(导航:任意)=>{ 返回( 我的注册页面 导航。导航(“主屏幕”)}> ); }; 导出默认注册屏幕;,typescript,react-native,react-navigation-stack,tsx,Typescript,React Native,React Navigation Stack,Tsx,当我使用.tsx作为文件的扩展名时,出现了错误。例如:-RegistrationScreen.tsx,然后得到错误 // TypeError:navigation.navigate不是一个函数。(在“navigation.navigate('HomeScreen')”中,“navigation.navigate”未定义)/您需要对函数注册屏幕进行对象分解。您可以使用该附加功能从道具访问导航: import React from 'react'; import {Button, View, Tex

当我使用.tsx作为文件的扩展名时,出现了错误。例如:-RegistrationScreen.tsx,然后得到错误 //
TypeError:navigation.navigate不是一个函数。(在“navigation.navigate('HomeScreen')”中,“navigation.navigate”未定义)/

您需要对函数注册屏幕进行对象分解。您可以使用该附加功能从道具访问导航:

import React from 'react';
import {Button, View, Text} from 'react-native';

const RegistrationScreen = (navigation: any) => {
  return (
    <View>
      <Text>My Registration Page</Text>
      <Button
        title="Go Back"
        onPress={() => navigation.navigate('HomeScreen')}></Button>
    </View>
  );
};

export default RegistrationScreen;

导航:any
表示变量导航可以是任何内容。它可以是数字、对象、未定义等

const RegistrationScreen = ({navigation: any}) => {}
然后,您尝试访问变量
navigation
上的属性
navigate
,而且您假设该属性是一个接受字符串参数的函数

打字脚本应该告诉你“等等,我不知道我能做这个!”

您应该能够从react导航包导入用于导航的类型定义。如果没有,这就足以用于此特定用途:

navigation.navigate('HomeScreen')
但是您得到的看起来是一个运行时错误,因为您希望组件的参数是一个包含prop“navigation”的props对象,但是您编写了它,所以整个props对象被称为“navigation”。这就是@realard在关于对象分解的回答中所说的

在普通JS中,它将是:

interface Navigation {
     navigate(destination: string): void;
}
但是对于typescript,我们需要声明navigation属性的类型必须为navigation。您可以通过以下任一方式执行此操作:

内联声明道具对象的定义

const RegistrationScreen = ({navigation}) =>
为道具声明类型或接口

const RegistrationScreen = ({navigation}: {navigation: Navigation}) =>

关于需要解构,你是对的,但是“:any”不能进入解构道具内部。你需要做({navigation}:{navigation:any})。@LindaPaiste,谢谢,伙计,正在找这个。它起作用了。。非常感谢。谢谢,这条线很有用。({navigation}:{navigation:navigation})我想知道有导航的接口,为什么要使用它?您需要您的组件知道
navigation
属性是一个react导航对象。看起来
导航的实际类型取决于您使用的导航器类型。看看这些例子:是的,明白了。谢谢你能告诉我如何使用React navigation 5X在网络和手机上使用导航吗?如果我在共享文件夹中实现,它会工作吗。?谢谢
interface RegistrationProps {
     navigation: Navigation;
}

const RegistrationScreen = ({navigation}: RegistrationProps) =>