I have the below code:
const incompleteKYCClaims = await Promise.all(
kycPendingProviders.map(async (p) => {
const provider = await getProviderOrThrow(p.tin)
const isPreviouslyApproved = provider.stripeAccount != undefined
if (isPreviouslyApproved) {
return
}
return toProviderRelationshipClaims({ tin: p.tin, role: ProviderUserSubRoles.ky, status: 'KYCInDraft' })
})
)
const incompleteKYCClaimsFiltered = incompleteKYCClaims.filter(
(claim) => claim
) as Array<ProviderRelationshipClaims>
It is working correctly. However, I would like to combine the map
and filter
passes into a single reduce pass. For that, wrote the below:
const incompleteKYCClaims = kycPendingProviders.reduce<Array<ProviderRelationshipClaims>>( async (filtered, p) => {
const provider = await getProviderOrThrow(p.tin)
const isPreviouslyApproved = previouslyApproved.includes(provider.status)
if (!isPreviouslyApproved) {
filtered.push(toProviderRelationshipClaims({tin: p.tin, role: ProviderUserSubRoles.ky, status: 'KYCInDraft'}))
}
return filtered
}, Promise.resolve([]) as Array<ProviderRelationshipClaims>
The reduce version is not working. The error is: Argument of type '(filtered: ProviderRelationshipClaims[], p: ProviderRelationship) => Promise<ProviderRelationshipClaims[]>' is not assignable to parameter of type '(previousValue: ProviderRelationshipClaims[], currentValue: ProviderRelationship, currentIndex: number, array: ProviderRelationship[]) => ProviderRelationshipClaims[]'.
How could I rewrite the reduce
version so there are no problems?