Merge pull request #49029 from DavidSouther/fix/44466-contextual-keyword-assertion

fix(44466): Fixes parsing contextual keyword casts as arrow functions
This commit is contained in:
Daniel Rosenwasser 2022-05-10 16:37:49 -07:00 committed by GitHub
commit 3e24f14871
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 112 additions and 0 deletions

View File

@ -4538,6 +4538,10 @@ namespace ts {
// isn't actually allowed, but we want to treat it as a lambda so we can provide
// a good error message.
if (isModifierKind(second) && second !== SyntaxKind.AsyncKeyword && lookAhead(nextTokenIsIdentifier)) {
if (nextToken() === SyntaxKind.AsKeyword) {
// https://github.com/microsoft/TypeScript/issues/44466
return Tristate.False;
}
return Tristate.True;
}

View File

@ -0,0 +1,23 @@
//// [modifierParenCast.ts]
let readonly: any = undefined;
let override: any = undefined;
let out: any = undefined;
let declare: any = undefined;
export const a = (readonly as number);
export const b = (override as number);
export const c = (out as number);
export const d = (declare as number);
//// [modifierParenCast.js]
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.d = exports.c = exports.b = exports.a = void 0;
var readonly = undefined;
var override = undefined;
var out = undefined;
var declare = undefined;
exports.a = readonly;
exports.b = override;
exports.c = out;
exports.d = declare;

View File

@ -0,0 +1,33 @@
=== tests/cases/compiler/modifierParenCast.ts ===
let readonly: any = undefined;
>readonly : Symbol(readonly, Decl(modifierParenCast.ts, 0, 3))
>undefined : Symbol(undefined)
let override: any = undefined;
>override : Symbol(override, Decl(modifierParenCast.ts, 1, 3))
>undefined : Symbol(undefined)
let out: any = undefined;
>out : Symbol(out, Decl(modifierParenCast.ts, 2, 3))
>undefined : Symbol(undefined)
let declare: any = undefined;
>declare : Symbol(declare, Decl(modifierParenCast.ts, 3, 3))
>undefined : Symbol(undefined)
export const a = (readonly as number);
>a : Symbol(a, Decl(modifierParenCast.ts, 5, 12))
>readonly : Symbol(readonly, Decl(modifierParenCast.ts, 0, 3))
export const b = (override as number);
>b : Symbol(b, Decl(modifierParenCast.ts, 6, 12))
>override : Symbol(override, Decl(modifierParenCast.ts, 1, 3))
export const c = (out as number);
>c : Symbol(c, Decl(modifierParenCast.ts, 7, 12))
>out : Symbol(out, Decl(modifierParenCast.ts, 2, 3))
export const d = (declare as number);
>d : Symbol(d, Decl(modifierParenCast.ts, 8, 12))
>declare : Symbol(declare, Decl(modifierParenCast.ts, 3, 3))

View File

@ -0,0 +1,41 @@
=== tests/cases/compiler/modifierParenCast.ts ===
let readonly: any = undefined;
>readonly : any
>undefined : undefined
let override: any = undefined;
>override : any
>undefined : undefined
let out: any = undefined;
>out : any
>undefined : undefined
let declare: any = undefined;
>declare : any
>undefined : undefined
export const a = (readonly as number);
>a : number
>(readonly as number) : number
>readonly as number : number
>readonly : any
export const b = (override as number);
>b : number
>(override as number) : number
>override as number : number
>override : any
export const c = (out as number);
>c : number
>(out as number) : number
>out as number : number
>out : any
export const d = (declare as number);
>d : number
>(declare as number) : number
>declare as number : number
>declare : any

View File

@ -0,0 +1,11 @@
//@target: ES5
let readonly: any = undefined;
let override: any = undefined;
let out: any = undefined;
let declare: any = undefined;
export const a = (readonly as number);
export const b = (override as number);
export const c = (out as number);
export const d = (declare as number);