Следующие ошибки кода:
type Foo = {
a: true,
b: null,
c: null
} | {
a: false,
b: Error,
c: null
} | {
a: false,
b: null,
c: { prop: number}
}
function getFoo(): Foo {
return { a: false, b: null, c: { prop: 5 } };
}
const { a, b, c } = getFoo();
if (!a && !b) {
console.log(c.prop)
}
Приведенная ошибка:
Object is possibly 'null'.(2531)
Это имеет некоторый смысл, потому что, когда результат из getFoo()
был деструктурирован, типы из более крупный объект Foo
был потерян.
Однако я пытаюсь воспроизвести то, что делает клиент Apollo React:
const { loading, error, data } = useQuery('...');
if (loading) {
return '..';
}
if (error) {
return '..';
}
return data.foo;
Мне трудно понять, из их источник, как они это делают.
Это вообще возможно в Typescript? Я предполагаю, что их типы могут быть неточными на 100%, и они говорят, что всегда возвращают data
, даже если это не так.