Javascript Promise.allSettled()的响应上的类型错误

Javascript Promise.allSettled()的响应上的类型错误,javascript,node.js,typescript,Javascript,Node.js,Typescript,最近,我一直在尝试使用Promise.all和Typescript解决NodeJS问题,我面临着响应问题。AllSetted方法返回一个状态为“rejected”|“Completed”的数组和一个值(如果已满足)。问题是,当我尝试访问响应的值时,会出现以下错误: Property 'value' does not exist on type 'PromiseSettledResult<unknown>'. Property 'value' does not exist on typ

最近,我一直在尝试使用Promise.all和Typescript解决NodeJS问题,我面临着响应问题。AllSetted方法返回一个状态为“rejected”|“Completed”的数组和一个值(如果已满足)。问题是,当我尝试访问响应的值时,会出现以下错误:

Property 'value' does not exist on type 'PromiseSettledResult<unknown>'.
Property 'value' does not exist on type 'PromiseRejectedResult'.ts(2339)
如果我在我的项目上运行此代码,我会得到一个错误,因为最后出现了
result.value

我正在Windows上的12.18.3版上运行我的节点,我已将
tsconfig.json
上的目标设置为
ES2020
,以便能够使用该方法本身。

@jornsharpe回答:
您只有一个状态满足的值属性,而您没有检查它

因此,使用我自己的示例,可以如下所示进行修复:

const p1 = Promise.resolve(50); 
const p2 = Promise.resolve(100); 

const promiseArray = [p1, p2]; 
  
Promise.allSettled( promiseArray ). 
  then( results => results.forEach( result =>  
    console.log(result.status,
                result.status === 'fulfilled' && result.value
    );
  ));

它现在验证承诺是否得到满足,然后打印值(如果是这样)。

在筛选承诺数组的情况下得到相同的错误:

const promises = ids.map((id) => <some BE API call>);
const resolvedPromises = await Promise.allSettled(promises);
resolvedPromises.filter(({ status }) => status === 'fulfilled').map((p) => p.value);
而且
.map
不理解所有
拒绝的
承诺都是通过
过滤的
方法过滤的

所以,我甚至不能导入类型并向它们强制转换值

作为一个临时解决方案,我用注释抑制了ESLint和TSC规则:

  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
  // @ts-ignore
然后我在项目中创建了相同的
PromiseFulfilledResult
接口,并使用了类型转换:

resolvedPromises.filter(({ status }) => status === 'fulfilled').map((p) => (p as PromiseFulfilledResult).value);

因此,我摆脱了关于错误和忽略注释的ESLint/TS规则。

您只有一个状态满足的值属性,而您没有检查它。@jornsharpe OMG我简直不敢相信我花了3个小时打破了我的大脑,现在您告诉我就这么简单。现在问题解决了,我简直不敢相信。非常感谢你!不过,TS错误似乎是错误的-
PromisejectedResult
不应该有
,但是
PromiseSetedResult
应该有?如果您演示如何应用这些信息来生成工作代码,这将是一个更好的答案。@jornsharpe好的。对不起,这是我在这里的第一个问题,我从现在开始学习编码只有3个月了。谢谢你的时间!没问题,谢谢你的改进-注意,网站上有指导。
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
  // @ts-ignore
resolvedPromises.filter(({ status }) => status === 'fulfilled').map((p) => (p as PromiseFulfilledResult).value);