У меня есть объекты, возвращающие Promise, и я хочу вернуться к пустому массиву в случае сбоя. См. Ошибку типа в Playground.
(async () => {
const getSyncBackups = async () => [{a: 1, b: 2}];
// how to fallback to empty array without breaking the type in the `.map` operation?
const syncBackups = await getSyncBackups().catch(() => []);
// if I specify type explicitly, it will work:
// const syncBackups: {a: number, b: number}[] = await getSyncBackups().catch(() => []);
syncBackups.map(backup => console.log(backup)); // TS2349: This expression is not callable. Each member of the union type '(<U>(callbackfn: (value: { a: number; b: number; }, index: number, array: { a: number; b: number; }[]) => U, thisArg?: any) => U[]) | (<U>(callbackfn: (value: never, index: number, array: never[]) => U, thisArg?: any) => U[])' has signatures, but none of those signatures are compatible with each other.
})();
Я знаю, что могу исправить это, явно указав тип моего syncBackups
, но это кажется избыточным. TypeScript должен знать, что вызов map
для чего-то с типом {a: number, b: number}[] | []
может иметь только элементы типа {a: number, b: number}
. Верно?
Могу ли я сообщить об этом как о запросе функции, или мне не хватает чего-то очевидного?
Спасибо!