Typescript/Apollo:从内存缓存中访问 属性
Typescript/Apollo: access property from in memory cache
我正在使用 Apollo Client 并正在学习 Typescript。我有一个带有此更新道具的 Mutation
组件:
(cache, { data: { createTask } }) => {
const allTasks = cache.readQuery({ query: ALL_TASKS }).allTasks;
}
我遇到两个编译错误:
Object is possibly 'null'.
Property 'allTasks' does not exist on type '{}'.
我明白了大概的意思。 readQuery
可能 return null
(这是自我混淆,因为文档让我相信当没有找到结果时会抛出错误(https://www.apollographql.com/docs/react/advanced/caching.html#readquery)。
如何让编译器让我从 readQuery
的结果中读取 属性 allTasks
?
此外,仅供参考,我尝试了 运行 console.log(cache.readQuery({ query: ALL_TASKS }))
并确认确实存在有效数据并调用了 属性。
readQuery
接受结果类型的类型参数;您可以看到此 in the source code 或跳转到 IDE 中的 readQuery
声明。因此,你可以这样做:
interface AllTasksResult {
allTasks: any; // TODO: Put correct type here
}
// ...
const allTasks = cache.readQuery<AllTasksResult>({ query: ALL_TASKS })!.allTasks;
关于 null
:考虑针对类型声明与文档之间的不一致提交错误。目前,感叹号表示您知道前面的表达式(readQuery
的 return 值)不会为 null 或未定义。
我正在使用 Apollo Client 并正在学习 Typescript。我有一个带有此更新道具的 Mutation
组件:
(cache, { data: { createTask } }) => {
const allTasks = cache.readQuery({ query: ALL_TASKS }).allTasks;
}
我遇到两个编译错误:
Object is possibly 'null'.
Property 'allTasks' does not exist on type '{}'.
我明白了大概的意思。 readQuery
可能 return null
(这是自我混淆,因为文档让我相信当没有找到结果时会抛出错误(https://www.apollographql.com/docs/react/advanced/caching.html#readquery)。
如何让编译器让我从 readQuery
的结果中读取 属性 allTasks
?
此外,仅供参考,我尝试了 运行 console.log(cache.readQuery({ query: ALL_TASKS }))
并确认确实存在有效数据并调用了 属性。
readQuery
接受结果类型的类型参数;您可以看到此 in the source code 或跳转到 IDE 中的 readQuery
声明。因此,你可以这样做:
interface AllTasksResult {
allTasks: any; // TODO: Put correct type here
}
// ...
const allTasks = cache.readQuery<AllTasksResult>({ query: ALL_TASKS })!.allTasks;
关于 null
:考虑针对类型声明与文档之间的不一致提交错误。目前,感叹号表示您知道前面的表达式(readQuery
的 return 值)不会为 null 或未定义。