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



我正在使用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可能会返回null(这本身令人困惑,因为文档使我相信当找不到结果时会抛出错误(https://www.apollographql.com/docs/react/advanced/caching.html#readquery(。

如何让编译器让我从readQuery的结果中读取属性allTasks

另外,仅供参考,我尝试运行console.log(cache.readQuery({ query: ALL_TASKS }))并确认那里确实存在调用的属性的有效数据。

readQuery接受结果类型的类型参数;您可以在源代码中看到这一点,也可以通过跳转到 IDE 中的readQuery声明来查看这一点。 因此,您可以执行以下操作:

interface AllTasksResult {
allTasks: any;  // TODO: Put correct type here
}
// ...
const allTasks = cache.readQuery<AllTasksResult>({ query: ALL_TASKS })!.allTasks;

关于null:考虑为类型声明和文档之间的不一致提交错误。 现在,感叹号声明您知道前面的表达式(readQuery的返回值(不会为 null 或未定义。

最新更新