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 或未定义。