Go to file
ayazhafiz 1425e63029 fix(language-service): determine correct type for ngFor exported values (#34089)
Currently, variables of an unknown type in an `*ngFor` expression are
refined to have the type of the iterable binding of the `*ngFor`
expression. Unfortunately, this is a bug for variables aliasing
[values exported by
`*ngFor`](https://angular.io/api/common/NgForOf#local-variables),
including `index` and `first`, because they are also given the type of
the binding expression, but they are not of the binding type. For
example, in

```typescript
@Component({
  selector: 'test',
  template: `
    <div *ngFor="let hero of heroes; let i = index; let isFirst = first">
      {{ hero }}
    </div>
  `
})
export class TestComponent {
  heroes: Hero[];
}
```

The local variables `i` and `isFirst` are determined to have a type of
`Hero`, when actually their types are `number` and `boolean`,
respectively.

This commit fixes this bug by checking if the value of a variable in an
`*ngFor` expression is known to be an export and assigning the variable
the type of that export value. Only if the variable does not alias an
export is it typed with the binding value of the `*ngFor` expression.

Closes https://github.com/angular/vscode-ng-language-service/issues/460

PR Close #34089
2019-12-02 11:03:34 -08:00
.circleci ci: use more descriptive names for published build artifacts (#33957) 2019-11-22 14:05:52 -05:00
.devcontainer docs: add info on setting up VSCode remote development using docker containers (#33790) 2019-11-13 13:33:21 -08:00
.github ci: fix code ownership for size tracking (#34044) 2019-11-26 16:35:27 -05:00
.vscode build: migrate references and scripts that set to build with ivy via compile=aot to use config=ivy (#33983) 2019-11-26 16:38:40 -05:00
aio docs: add deprecated-api-item class to deprecated items (#34088) 2019-12-02 11:03:05 -08:00
docs build: migrate references and scripts that set to build with ivy via compile=aot to use config=ivy (#33983) 2019-11-26 16:38:40 -05:00
integration build: consolidate @angular-devkit/build-angular to the root package.json (#34002) 2019-12-02 10:49:12 -08:00
modules build: update to nodejs rules 0.42.1 (#34073) 2019-12-02 11:02:38 -08:00
packages fix(language-service): determine correct type for ngFor exported values (#34089) 2019-12-02 11:03:34 -08:00
scripts build: update scripting and tooling to rely on define=angular_ivy_enabled instream of define=compile (#33983) 2019-11-26 16:38:40 -05:00
third_party build: update to @bazel/bazel 1.0.0 (#33476) 2019-10-29 16:22:41 -07:00
tools build: remove obsolete build related tools and helper scripts (#34058) 2019-12-02 10:52:21 -08:00
.bazelignore build: add integration/platform-server/node_modules to .bazelignore (#33765) 2019-11-22 16:52:08 -05:00
.bazelrc build: remove remaining internal references to define=compile flag (#33983) 2019-11-26 16:38:40 -05:00
.clang-format feat(tooling): Add a .clang-format for automated JavaScript formatting. 2015-04-02 08:44:34 -07:00
.editorconfig build: use https link to editorconfig.org in .editorconfig (#27664) 2018-12-18 09:30:09 -08:00
.gitattributes test: fix ts api guardian and public guard tests on windows (#30105) 2019-04-26 16:32:22 -07:00
.gitignore docs: add info on setting up VSCode remote development using docker containers (#33790) 2019-11-13 13:33:21 -08:00
.mailmap build: add a Git .mailmap with my new name (#19550) 2017-10-09 14:35:30 -07:00
.nvmrc build: update .nvmrc to correct node version (#33636) 2019-11-06 21:23:07 +00:00
BUILD.bazel build: reference zone.js from source directly instead of npm. (#33046) 2019-11-06 00:48:34 +00:00
CHANGELOG.md docs: release notes for the v9.0.0-rc.4 release 2019-11-27 15:16:35 -08:00
CODE_OF_CONDUCT.md docs: fix community tab in GitHub by copying CoC 2018-02-27 19:02:30 -08:00
CONTRIBUTING.md docs: add missing parenthesis (#31041) 2019-10-07 11:02:33 -07:00
LICENSE build: bump year (#27880) 2019-01-11 11:15:59 -08:00
README.md docs: fix typo of Typescript to TypeScript (#32153) 2019-08-15 12:44:41 -07:00
WORKSPACE build: update to nodejs rules 0.42.1 (#34073) 2019-12-02 11:02:38 -08:00
browser-providers.conf.js ci: re-enable chrome mobile tests on android (#32447) 2019-09-03 11:58:30 -07:00
gulpfile.js build: remove obsolete build related tools and helper scripts (#34058) 2019-12-02 10:52:21 -08:00
karma-js.conf.js build: reference zone.js from source directly instead of npm. (#33046) 2019-11-06 00:48:34 +00:00
package.json build: update to nodejs rules 0.42.1 (#34073) 2019-12-02 11:02:38 -08:00
protractor-perf.conf.js fixup! test(ivy): make the test run with benchpress (#30449) 2019-05-16 20:04:04 -07:00
shims_for_IE.js Revert "refactor: add license header to JS files & format files (#12035)" 2016-10-04 14:06:41 -07:00
test-events.js refactor: rename unpatched event flag in Zone from `BLACK_LISTED_EVENTS` to `UNPATCHED_EVENTS` (#29617) 2019-10-04 08:44:58 -07:00
test-main.js feat(ivy): i18n - implement compile-time inlining (#32881) 2019-10-09 13:19:38 -07:00
tslint.json style: enforce disallowance of String, Number and Boolean constructors (#33210) 2019-10-17 14:12:00 -04:00
yarn.lock build: update to nodejs rules 0.42.1 (#34073) 2019-12-02 11:02:38 -08:00
yarn.lock.readme.md build: remove travisci leftovers (#27979) 2019-01-09 10:41:16 -08:00

README.md

CircleCI BrowserStack Status Join the chat at https://gitter.im/angular/angular npm version

Angular

Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages.

Quickstart

Get started in 5 minutes.

Changelog

Learn about the latest improvements.

Want to help?

Want to file a bug, contribute some code, or improve documentation? Excellent! Read up on our guidelines for contributing and then check out one of our issues in the hotlist: community-help.