Misko Hevery
33630dd3ed
fix(ivy): workaround for tsickle bug (#23379)
The issue is with tsickle type inference and the bug should be assigned to them.
The offending code is:
```
function cacheMatchingDirectivesForNode(
tNode: TNode, tView: TView, localRefs: string[] | null): void {
const exportsMap = localRefs ? {'': -1} : null; // <<<<< ===== OFFENDING LINE
const matches = tView.currentMatches = findDirectiveMatches(tNode);
if (matches) {
for (let i = 0; i < matches.length; i += 2) {
const def = matches[i] as DirectiveDef<any>;
const valueIndex = i + 1;
resolveDirective(def, valueIndex, matches, tView);
saveNameToExportMap(matches[valueIndex] as number, def, exportsMap);
}
}
if (exportsMap) cacheMatchingLocalNames(tNode, localRefs, exportsMap);
}
```
because it generates invalid js closure code:
```
function cacheMatchingDirectivesForNode(tNode, tView, localRefs) {
const /** @type {(null|{: number})} */ exportsMap = localRefs ? { '': -1 } : null; // <<<<< ===== OFFENDING LINE
const /** @type {(null|!Array<?>)} */ matches = tView.currentMatches = findDirectiveMatches(tNode);
if (matches) {
for (let /** @type {number} */ i = 0; i < matches.length; i += 2) {
const /** @type {!tsickle_forward_declare_11.DirectiveDef<?>} */ def = /** @type {!tsickle_forward_declare_11.DirectiveDef<?>} */ (matches[i]);
const /** @type {number} */ valueIndex = i + 1;
resolveDirective(def, valueIndex, matches, tView);
saveNameToExportMap(/** @type {number} */ (matches[valueIndex]), def, exportsMap);
}
}
if (exportsMap)
cacheMatchingLocalNames(tNode, localRefs, exportsMap);
}
```
The workaround is to declare the type explicitly such as:
```
const exportsMap: ({[key:string]:number}|null) = localRefs ? {'': -1} : null;
```
which than generates valid closure code:
```
const /** @type {(null|!Object<string,number>)} */ exportsMap = localRefs ? { '': -1 } : null;
```
PR Close #23379
2018-04-13 21:29:39 -07:00
..
2018-04-10 21:49:32 -07:00
2018-04-13 16:30:50 -07:00
2018-04-13 13:11:01 -07:00
2018-04-13 16:30:23 -07:00
2018-04-13 14:29:52 -07:00
2018-04-13 16:20:25 -07:00
2018-04-13 21:29:39 -07:00
2017-03-08 16:29:27 -08:00
2018-04-13 00:50:04 -07:00
2018-03-23 13:42:51 -04:00
2018-04-10 21:49:32 -07:00
2018-04-13 13:11:01 -07:00
2018-04-13 00:06:26 -07:00
2018-04-12 23:17:38 -07:00
2018-04-10 21:49:32 -07:00
2018-04-13 16:30:50 -07:00
2018-04-13 13:11:01 -07:00
2018-04-10 21:49:32 -07:00
2018-04-10 21:49:32 -07:00
2018-04-13 13:13:36 -07:00
2018-04-12 23:16:18 -07:00
2018-02-15 14:08:53 -08:00
2017-03-08 16:29:27 -08:00
2017-09-22 13:20:52 -07:00
2017-09-29 09:26:38 -07:00
2018-01-04 17:45:36 -05:00
2017-07-20 16:46:47 -05:00
2017-10-30 23:09:17 -04:00
2017-03-08 16:29:27 -08:00
2018-03-15 21:16:03 -07:00
2017-09-26 13:31:59 -07:00
2018-04-11 18:13:30 -07:00
2017-12-22 13:10:51 -08:00