Promise.allSettled类型稿数组推理

问题描述 投票:0回答:1

我想让Typescript在一个过滤后的数组中推断类型,我是根据 "拒绝 "或 "完全满足 "的状态(来自Promise.allSettled)来过滤结果的。

我根据 "拒绝 "或 "已满 "的状态来过滤结果(来自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')
javascript typescript promise type-inference
1个回答
1
投票

你可以使用类型谓词来达到这个目的

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

const fullfilledResults = results.filter(assertFullfilled); // FullFilledResults[]
© www.soinside.com 2019 - 2024. All rights reserved.