“对象”类型上不存在属性“id”?

时间:2021-07-01 04:50:48

标签: typescript react-native

我正在尝试使用 AWS Amplify 的 DataStore 和来自 @react-navigation/native 库的 useRoute() 钩子导入视频 ID。

到目前为止一切正常,但我不断收到此错误:

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

我尝试在 google 上搜索,发现了一些类似的东西,但没有一种解决方案适用于我的应用。

我的代码:

    const [video, setVideo] = useState<Video | null >(null)
    const [comments, setComments] = useState<Comment[]>([])
    const route = useRoute()
    const videoId = route.params?.id

    useEffect(() => {
        DataStore.query(Video, videoId).then(setVideo)
    }, [videoId])

1 个答案:

答案 0 :(得分:0)

react-navigationuseRoute 需要提供显式类型参数才能键入返回的结果。

首先,您需要在某处定义应用程序路由和相应路由属性的完整列表:

type AppRouteParamList = {
    Home: undefined // undefined means Home route doesn't have route parameters
    Video: { id: string } | undefined
}

然后在你的组件中,你必须用正确的类型参数注释 useRoute

import { AppRouteParamList } from './routes.ts'
import { useRoute, RouteProp } from '@react-navigation/native'

const route = useRoute<RouteProp<AppRouteParamList, 'Video'>>()
const videoId = route.params?.id