google / google/closure-compiler
Bad type inference from returning Promise w/ struct 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
Assessment
This issue has not been assessed yet.