diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 6ce2ef1461f..9b3d9594c4e 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -865,12 +865,12 @@ module ts { return createMissingList(); } - function parseEntityName(): EntityName { + function parseEntityName(allowReservedWords?: boolean): EntityName { var entity: EntityName = parseIdentifier(); while (parseOptional(SyntaxKind.DotToken)) { var node = createNode(SyntaxKind.QualifiedName, entity.pos); node.left = entity; - node.right = parseIdentifier(); + node.right = allowReservedWords ? parseIdentifierName() : parseIdentifier(); entity = finishNode(node); } return entity; @@ -909,7 +909,7 @@ module ts { function parseTypeQuery(): TypeQueryNode { var node = createNode(SyntaxKind.TypeQuery); parseExpected(SyntaxKind.TypeOfKeyword); - node.exprName = parseEntityName(); + node.exprName = parseEntityName(/*allowReservedWords*/ true); return finishNode(node); } diff --git a/tests/baselines/reference/typeQueryWithReservedWords.js b/tests/baselines/reference/typeQueryWithReservedWords.js new file mode 100644 index 00000000000..e6e7f86541b --- /dev/null +++ b/tests/baselines/reference/typeQueryWithReservedWords.js @@ -0,0 +1,29 @@ +//// [typeQueryWithReservedWords.ts] +class Controller { + create() { + } + delete() { + } + var() { + } +} + +interface IScope { + create: typeof Controller.prototype.create; + delete: typeof Controller.prototype.delete; // Should not error + var: typeof Controller.prototype.var; // Should not error +} + + +//// [typeQueryWithReservedWords.js] +var Controller = (function () { + function Controller() { + } + Controller.prototype.create = function () { + }; + Controller.prototype.delete = function () { + }; + Controller.prototype.var = function () { + }; + return Controller; +})(); diff --git a/tests/cases/conformance/types/specifyingTypes/typeQueries/typeQueryWithReservedWords.ts b/tests/cases/conformance/types/specifyingTypes/typeQueries/typeQueryWithReservedWords.ts new file mode 100644 index 00000000000..5fb9d2233f1 --- /dev/null +++ b/tests/cases/conformance/types/specifyingTypes/typeQueries/typeQueryWithReservedWords.ts @@ -0,0 +1,14 @@ +class Controller { + create() { + } + delete() { + } + var() { + } +} + +interface IScope { + create: typeof Controller.prototype.create; + delete: typeof Controller.prototype.delete; // Should not error + var: typeof Controller.prototype.var; // Should not error +}