Typescript / Apollo:内存缓存中的访问属性

时间:2018-09-15 19:23:43

标签: typescript react-apollo apollo-client

我正在使用Apollo Client,正在学习打字稿。我有一个0.00032850727438929998173 组件和这个更新道具:

Mutation

我遇到两个编译错误:

(cache, { data: { createTask } }) => {
    const allTasks = cache.readQuery({ query: ALL_TASKS }).allTasks;
}

我了解一般想法。 Object is possibly 'null'. Property 'allTasks' does not exist on type '{}'. 可能会返回readQuery(这很令人困惑,因为文档使我相信,未找到任何结果时会引发错误(https://www.apollographql.com/docs/react/advanced/caching.html#readquery)。

如何使编译器从null的结果中读取属性allTasks

此外,仅供参考,我尝试运行readQuery,并确认其中确实存在有效的数据,并且具有一个名为的属性。

1 个答案:

答案 0 :(得分:3)

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)不会为null或未定义。