Skip to content

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

Closed
@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

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions