sto*_*elj 3 typescript react-apollo apollo-client
我正在使用 Apollo Client 并且正在学习 Typescript。我有一个Mutation带有此更新道具的组件:
(cache, { data: { createTask } }) => {
const allTasks = cache.readQuery({ query: ALL_TASKS }).allTasks;
}
Run Code Online (Sandbox Code Playgroud)
我收到两个编译错误:
Object is possibly 'null'.
Property 'allTasks' does not exist on type '{}'.
Run Code Online (Sandbox Code Playgroud)
我理解总体思路。readQuery可能会返回null(这是自我混淆,因为文档让我相信当没有找到结果时会抛出错误(https://www.apollographql.com/docs/react/advanced/caching.html#readquery)。
我怎样才能让编译器让我allTasks从结果中读取属性readQuery?
另外,仅供参考,我尝试运行console.log(cache.readQuery({ query: ALL_TASKS }))并确认那里确实存在有效数据并调用了一个属性。
Mat*_*hen 13
readQuery接受结果类型的类型参数;您可以在源代码中或通过跳转到readQueryIDE 中的声明来看到这一点。因此,您可以这样做:
interface AllTasksResult {
allTasks: any; // TODO: Put correct type here
}
// ...
const allTasks = cache.readQuery<AllTasksResult>({ query: ALL_TASKS })!.allTasks;
Run Code Online (Sandbox Code Playgroud)
关于null:考虑为类型声明和文档之间的不一致提交错误。现在,感叹号声称您知道前面的表达式( 的返回值readQuery)不会为空或未定义。
| 归档时间: |
|
| 查看次数: |
2187 次 |
| 最近记录: |