Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Property 'allSettled' does not exist on type 'PromiseConstructor'.ts(2339)

I'm trying to use the Promise.allSettled API with TypeScript. Code here:

server.test.ts:

it('should partial success if QPS > 50', async () => {   const requests: any[] = [];   for (let i = 0; i < 51; i++) {     requests.push(rp('http://localhost:3000/place'));   }   await Promise.allSettled(requests);   // ... }); 

But TSC throws an error:

Property 'allSettled' does not exist on type 'PromiseConstructor'.ts(2339)

I already added these values to the lib option in tsconfig.json:

tsconfig.json:

{   "compilerOptions": {     /* Basic Options */     "target": "ES2015" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */,     "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */,     "lib": [       "ES2015",       "ES2016",       "ES2017",       "ES2018",       "ES2019",       "ES2020",       "ESNext"     ]     // ... } 

TypeScript version: "typescript": "^3.7.3"

So, how can I solve this? I know I can use an alternative module, but I am curious about working with TypeScript natively.

like image 493
slideshowp2 Avatar asked Feb 18 '20 07:02

slideshowp2


1 Answers

The types for Promise.allSettled() were only merged in January, and will apparently be released in TypeScript 3.8.

As an interim solution, you can declare a mock-ish type for the function yourself:

declare interface PromiseConstructor {     allSettled(promises: Array<Promise<any>>): Promise<Array<{status: 'fulfilled' | 'rejected', value?: any, reason?: any}>>; } 
like image 73
AKX Avatar answered Sep 24 '22 06:09

AKX