Typescript: Insufficient type narrowing of return type with Promise.all

Created on 21 Nov 2019  路  4Comments  路  Source: microsoft/TypeScript


TypeScript Version: 3.7.2


Search Terms:
generics readonly Promise.all

Code

{
  "compilerOptions": {
    "target": "es2015",
    "module": "commonjs",
    "strictNullChecks": true,
    "esModuleInterop": true,
  }
}
declare function x1(): Promise<number>;
declare function x2(): Promise<number | null>;

(async () => {
    const [a, b] = await Promise.all([x1(), x2()]);
    if (a < 1) { }
})();

Expected behavior:
type of a should be number

Actual behavior:
type of a is number | null

Playground Link:
https://www.typescriptlang.org/play/index.html?noImplicitAny=false&strictFunctionTypes=false&strictPropertyInitialization=false&strictBindCallApply=false&noImplicitThis=false&noImplicitReturns=false&esModuleInterop=false&ssl=1&ssc=1&pln=8&pc=1#code/CYUwxgNghgTiAEAzArgOzAFwJYHtXwA8BGACgEoAueABRhwFssBnEAHlWXoCMQYA+ANwAoUJFgIU6bHkIAmclVoNmbDt17wAPvA4QIgoUJJQmAT3Txy8ALx94AbyEBIMHiYZ4AbSgAaeFwBdG3goAHcoLA8lRhYAOig9Ek9icj8CeTIAsmEnLERLKHhWeCIyB3gAXyEKsnJhIA

Related Issues:

Duplicate

Most helpful comment

33707 might fix this one

All 4 comments

another example:

declare class C<X> { }

declare function fn<T1, T2>(values: readonly [C<T1>, C<T2>]): [T1, T2];

declare function x1(): C<number>;
declare function x2(): C<number | null>;

(async () => {
    const [a, b] = fn([x1(), x2()]);
    if (a < 1) { }
})();

this code works if there is

  • no readonly modifer
  • or compiler option of strictNullChecks: false
  • or no generic class

Duplicate of #35136, #34925, #33562. Found by searching for Promise.all.

33707 might fix this one

This issue has been marked as a 'Duplicate' and has seen no recent activity. It has been automatically closed for house-keeping purposes.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

blakeembrey picture blakeembrey  路  171Comments

RyanCavanaugh picture RyanCavanaugh  路  205Comments

rwyborn picture rwyborn  路  210Comments

disshishkov picture disshishkov  路  224Comments

jonathandturner picture jonathandturner  路  147Comments