google / google/closure-compiler

Bad type inference from returning Promise w/ struct types

Open
#827 7 comments 0 reactions 0 assignees View on GitHub
bug OTI P3 Types
Dominant language
JavaScript
Stars
7.7k
Forks
1.2k
Avg merge
2d 12h
Merged PRs (30d)
6

Description

This code is rejected:

``` js
/**
* @return {!Promise<{member: string}>}
*/
function foo() {
return Promise.resolve({member: ''});
};
```

This code compiles:

``` js
/**
* @return {!Promise<{member: string}>}
*/
function bar() {
/** @type {{member: string}} */
var result = {member: ''};
return Promise.resolve(result);
};
```

Here's the error message:

```
## /usr/local/google/home/jrw/chrome_dev/src/bad.js:5: ERROR - inconsistent return type
## found : Promise<{member: string}>
## required: Promise<{member: string}>
## return Promise.resolve({member: ''});
## ^
```

And here are the flags I'm using:

```
--accept_const_keyword --jscomp_error=accessControls --jscomp_error=ambiguousFunctionDecl --jscomp_error=checkStructDictInheritance --jscomp_error=checkTypes --jscomp_error=checkVars --jscomp_error=constantProperty --jscomp_error=deprecated --jscomp_error=externsValidation --jscomp_error=globalThis --jscomp_error=invalidCasts --jscomp_error=missingProperties --jscomp_error=missingReturn --jscomp_error=nonStandardJsDocs --jscomp_error=suspiciousCode --jscomp_error=undefinedNames --jscomp_error=undefinedVars --jscomp_error=unknownDefines --jscomp_error=uselessCode --jscomp_error=visibility --language_in=ECMASCRIPT5_STRICT --summary_detail_level=3 --jscomp_error=reportUnknownTypes --jscomp_error=duplicate --jscomp_error=misplacedTypeAnnotation
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.