Typescript / Apollo: свойство доступа из кеша памяти - PullRequest
0 голосов
/ 15 сентября 2018

Я использую Apollo Client и изучаю Typescript. У меня есть Mutation компонент с этим обновлением prop:

(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).

Как заставить компилятор позволить мне прочитать свойство allTasks из результата readQuery?

Также, к вашему сведению, я попытался запустить console.log(cache.readQuery({ query: ALL_TASKS })) и подтвердил, что там действительно есть действительные данные со свойством с именем.

1 Ответ

0 голосов
/ 16 сентября 2018

readQuery принимает аргумент типа для типа результата; Вы можете увидеть это в исходном коде или перейдя к объявлению readQuery в вашей IDE. Таким образом, вы можете сделать:

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

О null: рассмотрите возможность сообщения об ошибке из-за несоответствия между объявлениями типов и документацией. Пока восклицательный знак утверждает, что вы знаете, что предыдущее выражение (возвращаемое значение readQuery) не будет нулевым или неопределенным.

...