属性 在使用 TypeScript 的 React Native 中类型 'object' 上不存在

Property doesn't exist on type 'object' in React Native with TypeScript

我是 React Native 和 TypeScript 的新手,如果问题很简单,请原谅我。

在我的应用程序中,我有一个屏幕,我正在使用该屏幕进行导航 React-Navigation 我还通过导航传递回调函数。

navigation.navigate('BluredSuccess', {blurredSuccessCallback})

我显示 BlurredScreen 2 秒,然后使用 navigation.pop 关闭并调用回调函数,如下所示:

import { NavigationScreenProp } from 'react-navigation';
import { Route } from '@react-navigation/native';

interface Props {
    navigation?: NavigationScreenProp,
    route: Route<any>
}

const LoginOtpSuccess : React.FC<Props> = ({navigation, route: {params}}) => {

    React.useEffect(() => { setTimeout(() => {
                
        navigation.pop()
        params.blurredSuccessCallback() // here I see an error.

    }, 2000) })

    return (
        <View style={styles.container}>
            <BlurView
                style={styles.absolute}
                blurType="light"
                blurAmount={40}
                reducedTransparencyFallbackColor="white"
            />
            <Image source={require('../../../assets/otp_success.png')} style={{width:90, height:90}}></Image>
        </View>
    )
}

现在代码可以正常工作了,但我一直在我的回调方法中看到一个错误:

Property 'blurredSuccessCallback' does not exist on type 'object'. 

我在 params 变量上也看到 Object is possibly 'undefined'.

我该如何解决这个错误?在我的 Props 界面中 navigationroute 的正确类型应该是什么我不认为使用任何是正确的方法。

这样试试

interface Props {
    navigation?: NavigationScreenProp
    route?: {
      params?: {
        blurredSuccessCallback?(): void
      }
     }
}

您需要正确注释您的属性,routenavigation。通常,任何使用 ? 指示符包含可选字段的类型都可能是未定义的,您需要在使用这些字段的任何地方考虑到这一点。

在此处输入道具的一种常见方式:

import { RouteProp } from '@react-navigation/native';
import { NavigationScreenProp } from 'react-navigation';

// Your stack here, or import this to fit your needs
type RootParamList = {
  Home: undefined;
  BlurredSuccess: { blurredSuccessCallback: () => void };
};

type BlurredSuccessRouteProp = RouteProp<RootParamList, 'BlurredSuccess'>;
type BlurredSuccessNavigationProp = NavigationScreenProp<RootParamList, 'BlurredSuccess'>;

type Props = {
  navigation: BlurredSuccessNavigationProp,
  route: BlurredSuccessRouteProp;
};

const LoginOtpSuccess = ({ route, navigation }: Props) => {
    const { blurredSuccessCallback } = route.params;
    React.useEffect(() => { setTimeout(() => {
        navigation.pop();
        blurredSuccessCallback();
    }, 2000) })

    return (
        // ...
    )
}

有关更多示例,请参阅 the documentation