Skip to content

Insufficient type narrowing of return type with Promise.all #35258

@sapphire-sh

Description

@sapphire-sh

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:

Metadata

Metadata

Assignees

No one assigned

    Labels

    DuplicateAn existing issue was already createdFix AvailableA PR has been opened for this issue

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions