From 8eeb763cdd2bf7611fc98a430d5a9d47e8545a5e Mon Sep 17 00:00:00 2001 From: Klaus Meinhardt Date: Wed, 14 Aug 2019 21:00:19 +0200 Subject: [PATCH] report invalid modifiers on class expression properties Fixes: #32532 --- src/compiler/checker.ts | 4 ++-- .../classExpressionPropertyModifiers.errors.txt | 14 ++++++++++++++ .../compiler/classExpressionPropertyModifiers.ts | 8 ++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/classExpressionPropertyModifiers.errors.txt create mode 100644 tests/cases/compiler/classExpressionPropertyModifiers.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 9d6fa60306c..74bf936d5c8 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -32406,7 +32406,7 @@ namespace ts { else if (flags & ModifierFlags.Async) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "export", "async"); } - else if (node.parent.kind === SyntaxKind.ClassDeclaration) { + else if (isClassLike(node.parent)) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); } else if (node.kind === SyntaxKind.Parameter) { @@ -32429,7 +32429,7 @@ namespace ts { else if (flags & ModifierFlags.Async) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async"); } - else if (node.parent.kind === SyntaxKind.ClassDeclaration) { + else if (isClassLike(node.parent)) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); } else if (node.kind === SyntaxKind.Parameter) { diff --git a/tests/baselines/reference/classExpressionPropertyModifiers.errors.txt b/tests/baselines/reference/classExpressionPropertyModifiers.errors.txt new file mode 100644 index 00000000000..f4b3fed7e54 --- /dev/null +++ b/tests/baselines/reference/classExpressionPropertyModifiers.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/classExpressionPropertyModifiers.ts(2,5): error TS1031: 'declare' modifier cannot appear on a class element. +tests/cases/compiler/classExpressionPropertyModifiers.ts(3,5): error TS1031: 'export' modifier cannot appear on a class element. + + +==== tests/cases/compiler/classExpressionPropertyModifiers.ts (2 errors) ==== + const a = class Cat { + declare [Symbol.toStringTag] = "uh"; + ~~~~~~~ +!!! error TS1031: 'declare' modifier cannot appear on a class element. + export foo = 1; + ~~~~~~ +!!! error TS1031: 'export' modifier cannot appear on a class element. + } + \ No newline at end of file diff --git a/tests/cases/compiler/classExpressionPropertyModifiers.ts b/tests/cases/compiler/classExpressionPropertyModifiers.ts new file mode 100644 index 00000000000..be9e66eea8e --- /dev/null +++ b/tests/cases/compiler/classExpressionPropertyModifiers.ts @@ -0,0 +1,8 @@ +// @noEmit: true +// @noTypesAndSymbols: true +// @lib: es6 + +const a = class Cat { + declare [Symbol.toStringTag] = "uh"; + export foo = 1; +}