Вывод массива машинописного текста Promise.allSettled - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу, чтобы Typescript выводил типы в отфильтрованном массиве.

Я фильтрую свои результаты на основе статуса "отклонен" или "заполнен" (из Promise.allSettled).

По какой-то причине Typescript не выводит мои результаты фильтрации.
Вот минимальный пример того, чего я пытаюсь достичь:

type FullFilledResults = {
  status: 'fullfilled';
  value: any;
}

type RejectResults = {
  status: 'rejected';
  reason: string;
}

type Results = RejectResults | FullFilledResults

const results: Results[] = [{
  status: 'rejected',
  reason: 'err'
}, {
  status: 'fullfilled',
  value: {}
}]

// Type infer Results[] but I want FullFilledResults[]
const fullfilledResults = results.filter(v => v.status === 'fullfilled')

// Type infer Results[] but I want RejectedResults[]
const rejectedResults = results.filter(v => v.status === 'rejected')

1 Ответ

1 голос
/ 30 апреля 2020

Для этой цели вы можете использовать предикаты типа

function assertFullfilled(item: Results): item is FullFilledResults {
    return item.status === 'fullfilled';
}

const fullfilledResults = results.filter(assertFullfilled); // FullFilledResults[]
...