You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Not possible to compile latest Angular 2 due to literal types #11794
› ./node_modules/.bin/tsc --version
Version 2.1.0-dev.20161022
› ./node_modules/.bin/tsc -p ./modules/tsconfig.json
modules/@angular/compiler/src/expression_parser/lexer.ts(296,13): error TS2365: Operator '==' cannot be applied to types '92' and '117'.
It looks like literal type inference went a bit aggressive with this particular piece of code.
Funnily enough, I've tried to isolate the issue in a more concise class with just a scan method but works all the time, so it must be some weird combination of things going on here, which I couldn't figure out. ):
changed the title [-]Not possible to compile latest Angular 2 modules due to literal types[/-][+]Not possible to compile latest Angular 2 due to literal types[/+]on Oct 22, 2016
This is an effect of #11587. In the if (this.peek == chars.$BACKSLASH) test we narrow this.peek to the literal type 92 (the value of chars.$BACKSLASH). We then complain when you try to compare this literal type to the literal type 117 (the value of chars.$u). The issue of course is that we don't know that this.advance() has a side effect on the value of this.peek.
Interestingly, we had a very similar issue with TypeScript's own parser as described here. We opted to use an accessor function to obtain the value of the side effected variable.
Activity
[-]Not possible to compile latest Angular 2 modules due to literal types[/-][+]Not possible to compile latest Angular 2 due to literal types[/+]alfaproject commentedon Oct 22, 2016
Forgot to say that it is possible to prevent that error by widening the literal type to number, like this:
But still looks like some weird bug to me.
ahejlsberg commentedon Oct 22, 2016
This is an effect of #11587. In the
if (this.peek == chars.$BACKSLASH)test we narrowthis.peekto the literal type92(the value ofchars.$BACKSLASH). We then complain when you try to compare this literal type to the literal type 117 (the value ofchars.$u). The issue of course is that we don't know thatthis.advance()has a side effect on the value ofthis.peek.Interestingly, we had a very similar issue with TypeScript's own parser as described here. We opted to use an accessor function to obtain the value of the side effected variable.