diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts
index 19f3f5b36927c..6dbd1da2e70f4 100644
--- a/src/compiler/utilities.ts
+++ b/src/compiler/utilities.ts
@@ -3112,7 +3112,10 @@ namespace ts {
return (parent as BindingElement | ImportSpecifier).propertyName === node;
case SyntaxKind.ExportSpecifier:
case SyntaxKind.JsxAttribute:
- // Any name in an export specifier or JSX Attribute
+ case SyntaxKind.JsxSelfClosingElement:
+ case SyntaxKind.JsxOpeningElement:
+ case SyntaxKind.JsxClosingElement:
+ // Any name in an export specifier or JSX Attribute or Jsx Element
return true;
}
return false;
diff --git a/tests/baselines/reference/jsxElementsAsIdentifierNames.js b/tests/baselines/reference/jsxElementsAsIdentifierNames.js
new file mode 100644
index 0000000000000..12e0c286b682f
--- /dev/null
+++ b/tests/baselines/reference/jsxElementsAsIdentifierNames.js
@@ -0,0 +1,25 @@
+//// [a.tsx]
+declare const React: any;
+declare module JSX {
+ interface IntrinsicElements {
+ ["package"]: any;
+ }
+}
+
+function A() {
+ return
+}
+
+function B() {
+ return
+}
+
+
+//// [a.js]
+"use strict";
+function A() {
+ return React.createElement("package", null);
+}
+function B() {
+ return React.createElement("package", null);
+}
diff --git a/tests/baselines/reference/jsxElementsAsIdentifierNames.symbols b/tests/baselines/reference/jsxElementsAsIdentifierNames.symbols
new file mode 100644
index 0000000000000..3b504d515aac9
--- /dev/null
+++ b/tests/baselines/reference/jsxElementsAsIdentifierNames.symbols
@@ -0,0 +1,31 @@
+=== tests/cases/compiler/a.tsx ===
+declare const React: any;
+>React : Symbol(React, Decl(a.tsx, 0, 13))
+
+declare module JSX {
+>JSX : Symbol(JSX, Decl(a.tsx, 0, 25))
+
+ interface IntrinsicElements {
+>IntrinsicElements : Symbol(IntrinsicElements, Decl(a.tsx, 1, 20))
+
+ ["package"]: any;
+>["package"] : Symbol(IntrinsicElements["package"], Decl(a.tsx, 2, 33))
+>"package" : Symbol(IntrinsicElements["package"], Decl(a.tsx, 2, 33))
+ }
+}
+
+function A() {
+>A : Symbol(A, Decl(a.tsx, 5, 1))
+
+ return
+>package : Symbol(JSX.IntrinsicElements["package"], Decl(a.tsx, 2, 33))
+}
+
+function B() {
+>B : Symbol(B, Decl(a.tsx, 9, 1))
+
+ return
+>package : Symbol(JSX.IntrinsicElements["package"], Decl(a.tsx, 2, 33))
+>package : Symbol(JSX.IntrinsicElements["package"], Decl(a.tsx, 2, 33))
+}
+
diff --git a/tests/baselines/reference/jsxElementsAsIdentifierNames.types b/tests/baselines/reference/jsxElementsAsIdentifierNames.types
new file mode 100644
index 0000000000000..3617a88c1c58e
--- /dev/null
+++ b/tests/baselines/reference/jsxElementsAsIdentifierNames.types
@@ -0,0 +1,29 @@
+=== tests/cases/compiler/a.tsx ===
+declare const React: any;
+>React : any
+
+declare module JSX {
+ interface IntrinsicElements {
+ ["package"]: any;
+>["package"] : any
+>"package" : "package"
+ }
+}
+
+function A() {
+>A : () => any
+
+ return
+> : error
+>package : any
+}
+
+function B() {
+>B : () => any
+
+ return
+> : error
+>package : any
+>package : any
+}
+
diff --git a/tests/baselines/reference/jsxParsingError4(strict=true).errors.txt b/tests/baselines/reference/jsxParsingError4(strict=true).errors.txt
deleted file mode 100644
index aeac8698a0ae0..0000000000000
--- a/tests/baselines/reference/jsxParsingError4(strict=true).errors.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-tests/cases/conformance/jsx/a.tsx(13,4): error TS1212: Identifier expected. 'public' is a reserved word in strict mode.
-tests/cases/conformance/jsx/a.tsx(13,13): error TS1212: Identifier expected. 'public' is a reserved word in strict mode.
-
-
-==== tests/cases/conformance/jsx/a.tsx (2 errors) ====
- declare const React: any
- declare namespace JSX {
- interface IntrinsicElements {
- [k: string]: any
- }
- }
-
- const a = (
-
- );
-
- const b = (
-
- ~~~~~~
-!!! error TS1212: Identifier expected. 'public' is a reserved word in strict mode.
- ~~~~~~
-!!! error TS1212: Identifier expected. 'public' is a reserved word in strict mode.
- );
-
\ No newline at end of file
diff --git a/tests/baselines/reference/jsxParsingError4(strict=true).types b/tests/baselines/reference/jsxParsingError4(strict=true).types
index f65d2d679b39c..021360520c02f 100644
--- a/tests/baselines/reference/jsxParsingError4(strict=true).types
+++ b/tests/baselines/reference/jsxParsingError4(strict=true).types
@@ -10,22 +10,22 @@ declare namespace JSX {
}
const a = (
->a : any
->( ) : any
+>a : error
+>( ) : error
-> : any
+> : error
>public-foo : any
>public-foo : any
);
const b = (
->b : any
->( ) : any
+>b : error
+>( ) : error
-> : any
+> : error
>public : any
>public : any
diff --git a/tests/cases/compiler/jsxElementsAsIdentifierNames.tsx b/tests/cases/compiler/jsxElementsAsIdentifierNames.tsx
new file mode 100644
index 0000000000000..bc1f7d9cdcb96
--- /dev/null
+++ b/tests/cases/compiler/jsxElementsAsIdentifierNames.tsx
@@ -0,0 +1,18 @@
+// @strict: true
+// @jsx: react
+// @filename: a.tsx
+
+declare const React: any;
+declare module JSX {
+ interface IntrinsicElements {
+ ["package"]: any;
+ }
+}
+
+function A() {
+ return
+}
+
+function B() {
+ return
+}