Как вернуться к пустому массиву, не нарушая неявный тип для операции «карта»? - PullRequest
0 голосов
/ 07 августа 2020

У меня есть объекты, возвращающие 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}. Верно?

Могу ли я сообщить об этом как о запросе функции, или мне не хватает чего-то очевидного?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...