+> : ^^^^^^^^^^^^^^^^^
>package : any
> : ^^^
>package : any
diff --git a/tests/baselines/reference/jsxNamespaceGlobalReexportMissingAliasTarget.errors.txt b/tests/baselines/reference/jsxNamespaceGlobalReexportMissingAliasTarget.errors.txt
index 52bc6cab05f0b..7058bac37625e 100644
--- a/tests/baselines/reference/jsxNamespaceGlobalReexportMissingAliasTarget.errors.txt
+++ b/tests/baselines/reference/jsxNamespaceGlobalReexportMissingAliasTarget.errors.txt
@@ -1,3 +1,4 @@
+/index.tsx(1,27): error TS2602: JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist.
/index.tsx(1,27): error TS7026: JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists.
/index.tsx(1,32): error TS7026: JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists.
@@ -100,9 +101,11 @@
// @ts-ignore
export import JSX = NotFound;
}
-==== /index.tsx (2 errors) ====
+==== /index.tsx (3 errors) ====
export const Comp = () =>
;
~~~~~
+!!! error TS2602: JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist.
+ ~~~~~
!!! error TS7026: JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists.
~~~~~~
!!! error TS7026: JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists.
\ No newline at end of file
diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt
index 5260784dbd25b..2f09b796143e3 100644
--- a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt
+++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt
@@ -1,7 +1,7 @@
-jsxNamespacePrefixIntrinsics.tsx(15,18): error TS2339: Property 'element' does not exist on type 'JSX.IntrinsicElements'.
-jsxNamespacePrefixIntrinsics.tsx(16,30): error TS2322: Type '{ attribute: string; }' is not assignable to type '{ "ns:attribute": string; }'.
+jsxNamespacePrefixIntrinsics.tsx(16,18): error TS2339: Property 'element' does not exist on type 'JSX.IntrinsicElements'.
+jsxNamespacePrefixIntrinsics.tsx(17,30): error TS2322: Type '{ attribute: string; }' is not assignable to type '{ "ns:attribute": string; }'.
Property 'attribute' does not exist on type '{ "ns:attribute": string; }'. Did you mean '"ns:attribute"'?
-jsxNamespacePrefixIntrinsics.tsx(17,30): error TS2322: Type '{ "ns:invalid": string; }' is not assignable to type '{ "ns:attribute": string; }'.
+jsxNamespacePrefixIntrinsics.tsx(18,30): error TS2322: Type '{ "ns:invalid": string; }' is not assignable to type '{ "ns:attribute": string; }'.
Property 'ns:invalid' does not exist on type '{ "ns:attribute": string; }'.
@@ -14,6 +14,7 @@ jsxNamespacePrefixIntrinsics.tsx(17,30): error TS2322: Type '{ "ns:invalid": str
"ns:NamespacedUpcaseAlsoIntrinsic": any,
"NS:NamespacedUpcaseAlsoIntrinsic": any
}
+ interface Element
{ props: P; type: T; }
}
declare var React: any;
@@ -45,26 +46,26 @@ declare function Component(props: { children?: number }): any;
Output::
/lib/tsc -p src/project
-[96msrc/project/index.tsx[0m:[93m10[0m:[93m3[0m - [91merror[0m[90m TS2746: [0mThis JSX tag's 'children' prop expects a single child of type 'never', but multiple children were provided.
+[96msrc/project/index.tsx[0m:[93m11[0m:[93m3[0m - [91merror[0m[90m TS2746: [0mThis JSX tag's 'children' prop expects a single child of type 'never', but multiple children were provided.
-[7m10[0m (
+[7m11[0m (
[7m [0m [91m ~~~~~~~~~[0m
-[96msrc/project/index.tsx[0m:[93m10[0m:[93m3[0m - [91merror[0m[90m TS2746: [0mThis JSX tag's 'children' prop expects a single child of type 'number | undefined', but multiple children were provided.
+[96msrc/project/index.tsx[0m:[93m11[0m:[93m3[0m - [91merror[0m[90m TS2746: [0mThis JSX tag's 'children' prop expects a single child of type 'number | undefined', but multiple children were provided.
-[7m10[0m (
+[7m11[0m (
[7m [0m [91m ~~~~~~~~~[0m
-[96msrc/project/index.tsx[0m:[93m10[0m:[93m3[0m - [91merror[0m[90m TS2769: [0mNo overload matches this call.
+[96msrc/project/index.tsx[0m:[93m11[0m:[93m3[0m - [91merror[0m[90m TS2769: [0mNo overload matches this call.
This JSX tag's 'children' prop expects a single child of type 'never', but multiple children were provided.
This JSX tag's 'children' prop expects a single child of type 'number | undefined', but multiple children were provided.
-[7m10[0m (
+[7m11[0m (
[7m [0m [91m ~~~~~~~~~[0m
-Found 3 errors in the same file, starting at: src/project/index.tsx[90m:10[0m
+Found 3 errors in the same file, starting at: src/project/index.tsx[90m:11[0m
exitCode:: ExitStatus.DiagnosticsPresent_OutputsGenerated
@@ -77,7 +78,7 @@ exitCode:: ExitStatus.DiagnosticsPresent_OutputsGenerated
//// [/src/project/tsconfig.tsbuildinfo]
-{"fileNames":["../../lib/lib.d.ts","./index.tsx"],"fileInfos":[{"version":"7198220534-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface ReadonlyArray { readonly length: number }","affectsGlobalScope":true},{"version":"42569361247-declare namespace JSX {\n interface ElementChildrenAttribute { children: {}; }\n interface IntrinsicElements { div: {} }\n}\n\ndeclare var React: any;\n\ndeclare function Component(props: never): any;\ndeclare function Component(props: { children?: number }): any;\n(\n \n \n)","affectsGlobalScope":true}],"root":[2],"options":{"jsx":2,"module":99,"strict":true},"semanticDiagnosticsPerFile":[[2,[{"start":265,"length":9,"messageText":"This JSX tag's 'children' prop expects a single child of type 'never', but multiple children were provided.","category":1,"code":2746},{"start":265,"length":9,"messageText":"This JSX tag's 'children' prop expects a single child of type 'number | undefined', but multiple children were provided.","category":1,"code":2746},{"start":265,"length":9,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"code":2746,"category":1,"messageText":"This JSX tag's 'children' prop expects a single child of type 'never', but multiple children were provided."},{"code":2746,"category":1,"messageText":"This JSX tag's 'children' prop expects a single child of type 'number | undefined', but multiple children were provided."}]},"relatedInformation":[]}]]],"version":"FakeTSVersion"}
+{"fileNames":["../../lib/lib.d.ts","./index.tsx"],"fileInfos":[{"version":"7198220534-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface ReadonlyArray { readonly length: number }","affectsGlobalScope":true},{"version":"20284851082-declare namespace JSX {\n interface ElementChildrenAttribute { children: {}; }\n interface IntrinsicElements { div: {} }\n interface Element
{ props: P; type: T; }\n}\n\ndeclare var React: any;\n\ndeclare function Component(props: never): any;\ndeclare function Component(props: { children?: number }): any;\n(\n \n \n)","affectsGlobalScope":true}],"root":[2],"options":{"jsx":2,"module":99,"strict":true},"semanticDiagnosticsPerFile":[[2,[{"start":316,"length":9,"messageText":"This JSX tag's 'children' prop expects a single child of type 'never', but multiple children were provided.","category":1,"code":2746},{"start":316,"length":9,"messageText":"This JSX tag's 'children' prop expects a single child of type 'number | undefined', but multiple children were provided.","category":1,"code":2746},{"start":316,"length":9,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"code":2746,"category":1,"messageText":"This JSX tag's 'children' prop expects a single child of type 'never', but multiple children were provided."},{"code":2746,"category":1,"messageText":"This JSX tag's 'children' prop expects a single child of type 'number | undefined', but multiple children were provided."}]},"relatedInformation":[]}]]],"version":"FakeTSVersion"}
//// [/src/project/tsconfig.tsbuildinfo.readable.baseline.txt]
{
@@ -97,11 +98,11 @@ exitCode:: ExitStatus.DiagnosticsPresent_OutputsGenerated
},
"./index.tsx": {
"original": {
- "version": "42569361247-declare namespace JSX {\n interface ElementChildrenAttribute { children: {}; }\n interface IntrinsicElements { div: {} }\n}\n\ndeclare var React: any;\n\ndeclare function Component(props: never): any;\ndeclare function Component(props: { children?: number }): any;\n(\n \n \n)",
+ "version": "20284851082-declare namespace JSX {\n interface ElementChildrenAttribute { children: {}; }\n interface IntrinsicElements { div: {} }\n interface Element
{ props: P; type: T; }\n}\n\ndeclare var React: any;\n\ndeclare function Component(props: never): any;\ndeclare function Component(props: { children?: number }): any;\n(\n \n \n)",
"affectsGlobalScope": true
},
- "version": "42569361247-declare namespace JSX {\n interface ElementChildrenAttribute { children: {}; }\n interface IntrinsicElements { div: {} }\n}\n\ndeclare var React: any;\n\ndeclare function Component(props: never): any;\ndeclare function Component(props: { children?: number }): any;\n(\n \n \n)",
- "signature": "42569361247-declare namespace JSX {\n interface ElementChildrenAttribute { children: {}; }\n interface IntrinsicElements { div: {} }\n}\n\ndeclare var React: any;\n\ndeclare function Component(props: never): any;\ndeclare function Component(props: { children?: number }): any;\n(\n \n \n)",
+ "version": "20284851082-declare namespace JSX {\n interface ElementChildrenAttribute { children: {}; }\n interface IntrinsicElements { div: {} }\n interface Element
{ props: P; type: T; }\n}\n\ndeclare var React: any;\n\ndeclare function Component(props: never): any;\ndeclare function Component(props: { children?: number }): any;\n(\n \n \n)",
+ "signature": "20284851082-declare namespace JSX {\n interface ElementChildrenAttribute { children: {}; }\n interface IntrinsicElements { div: {} }\n interface Element
{ props: P; type: T; }\n}\n\ndeclare var React: any;\n\ndeclare function Component(props: never): any;\ndeclare function Component(props: { children?: number }): any;\n(\n \n \n)",
"affectsGlobalScope": true
}
},
@@ -121,21 +122,21 @@ exitCode:: ExitStatus.DiagnosticsPresent_OutputsGenerated
"./index.tsx",
[
{
- "start": 265,
+ "start": 316,
"length": 9,
"messageText": "This JSX tag's 'children' prop expects a single child of type 'never', but multiple children were provided.",
"category": 1,
"code": 2746
},
{
- "start": 265,
+ "start": 316,
"length": 9,
"messageText": "This JSX tag's 'children' prop expects a single child of type 'number | undefined', but multiple children were provided.",
"category": 1,
"code": 2746
},
{
- "start": 265,
+ "start": 316,
"length": 9,
"code": 2769,
"category": 1,
@@ -162,7 +163,7 @@ exitCode:: ExitStatus.DiagnosticsPresent_OutputsGenerated
]
],
"version": "FakeTSVersion",
- "size": 1944
+ "size": 1996
}
@@ -173,26 +174,26 @@ Input::
Output::
/lib/tsc -p src/project
-[96msrc/project/index.tsx[0m:[93m10[0m:[93m3[0m - [91merror[0m[90m TS2746: [0mThis JSX tag's 'children' prop expects a single child of type 'never', but multiple children were provided.
+[96msrc/project/index.tsx[0m:[93m11[0m:[93m3[0m - [91merror[0m[90m TS2746: [0mThis JSX tag's 'children' prop expects a single child of type 'never', but multiple children were provided.
-[7m10[0m (
+[7m11[0m (
[7m [0m [91m ~~~~~~~~~[0m
-[96msrc/project/index.tsx[0m:[93m10[0m:[93m3[0m - [91merror[0m[90m TS2746: [0mThis JSX tag's 'children' prop expects a single child of type 'number | undefined', but multiple children were provided.
+[96msrc/project/index.tsx[0m:[93m11[0m:[93m3[0m - [91merror[0m[90m TS2746: [0mThis JSX tag's 'children' prop expects a single child of type 'number | undefined', but multiple children were provided.
-[7m10[0m (
+[7m11[0m (
[7m [0m [91m ~~~~~~~~~[0m
-[96msrc/project/index.tsx[0m:[93m10[0m:[93m3[0m - [91merror[0m[90m TS2769: [0mNo overload matches this call.
+[96msrc/project/index.tsx[0m:[93m11[0m:[93m3[0m - [91merror[0m[90m TS2769: [0mNo overload matches this call.
This JSX tag's 'children' prop expects a single child of type 'never', but multiple children were provided.
This JSX tag's 'children' prop expects a single child of type 'number | undefined', but multiple children were provided.
-[7m10[0m (
+[7m11[0m (
[7m [0m [91m ~~~~~~~~~[0m
-Found 3 errors in the same file, starting at: src/project/index.tsx[90m:10[0m
+Found 3 errors in the same file, starting at: src/project/index.tsx[90m:11[0m
exitCode:: ExitStatus.DiagnosticsPresent_OutputsGenerated
diff --git a/tests/baselines/reference/tsxAttributesHasInferrableIndex.js b/tests/baselines/reference/tsxAttributesHasInferrableIndex.js
index f7c0688803b23..9ff4ef0159c23 100644
--- a/tests/baselines/reference/tsxAttributesHasInferrableIndex.js
+++ b/tests/baselines/reference/tsxAttributesHasInferrableIndex.js
@@ -8,14 +8,17 @@ interface Attributes {
function createElement(name: string, attributes: Attributes | undefined, ...contents: string[]) {
return name;
}
-namespace createElement.JSX {
- type Element = string;
+namespace createElement {
+ export namespace JSX {
+ export type Element = string;
+ }
}
function Button(attributes: Attributes | undefined, contents: string[]) {
return '';
}
const b =
+const b2 =
//// [tsxAttributesHasInferrableIndex.js]
@@ -31,3 +34,4 @@ function Button(attributes, contents) {
return '';
}
var b = createElement(Button, null);
+var b2 = createElement(Button, { someProp: "" });
diff --git a/tests/baselines/reference/tsxAttributesHasInferrableIndex.symbols b/tests/baselines/reference/tsxAttributesHasInferrableIndex.symbols
index 8cb653bb34181..ae17109163fba 100644
--- a/tests/baselines/reference/tsxAttributesHasInferrableIndex.symbols
+++ b/tests/baselines/reference/tsxAttributesHasInferrableIndex.symbols
@@ -22,24 +22,33 @@ function createElement(name: string, attributes: Attributes | undefined, ...cont
return name;
>name : Symbol(name, Decl(tsxAttributesHasInferrableIndex.tsx, 4, 23))
}
-namespace createElement.JSX {
+namespace createElement {
>createElement : Symbol(createElement, Decl(tsxAttributesHasInferrableIndex.tsx, 3, 1), Decl(tsxAttributesHasInferrableIndex.tsx, 6, 1))
->JSX : Symbol(JSX, Decl(tsxAttributesHasInferrableIndex.tsx, 7, 24))
- type Element = string;
->Element : Symbol(Element, Decl(tsxAttributesHasInferrableIndex.tsx, 7, 29))
+ export namespace JSX {
+>JSX : Symbol(JSX, Decl(tsxAttributesHasInferrableIndex.tsx, 7, 25))
+
+ export type Element = string;
+>Element : Symbol(Element, Decl(tsxAttributesHasInferrableIndex.tsx, 8, 26))
+ }
}
function Button(attributes: Attributes | undefined, contents: string[]) {
->Button : Symbol(Button, Decl(tsxAttributesHasInferrableIndex.tsx, 9, 1))
->attributes : Symbol(attributes, Decl(tsxAttributesHasInferrableIndex.tsx, 11, 16))
+>Button : Symbol(Button, Decl(tsxAttributesHasInferrableIndex.tsx, 11, 1))
+>attributes : Symbol(attributes, Decl(tsxAttributesHasInferrableIndex.tsx, 13, 16))
>Attributes : Symbol(Attributes, Decl(tsxAttributesHasInferrableIndex.tsx, 0, 55))
->contents : Symbol(contents, Decl(tsxAttributesHasInferrableIndex.tsx, 11, 51))
+>contents : Symbol(contents, Decl(tsxAttributesHasInferrableIndex.tsx, 13, 51))
return '';
}
const b =
->b : Symbol(b, Decl(tsxAttributesHasInferrableIndex.tsx, 14, 5))
->Button : Symbol(Button, Decl(tsxAttributesHasInferrableIndex.tsx, 9, 1))
->Button : Symbol(Button, Decl(tsxAttributesHasInferrableIndex.tsx, 9, 1))
+>b : Symbol(b, Decl(tsxAttributesHasInferrableIndex.tsx, 16, 5))
+>Button : Symbol(Button, Decl(tsxAttributesHasInferrableIndex.tsx, 11, 1))
+>Button : Symbol(Button, Decl(tsxAttributesHasInferrableIndex.tsx, 11, 1))
+
+const b2 =
+>b2 : Symbol(b2, Decl(tsxAttributesHasInferrableIndex.tsx, 17, 5))
+>Button : Symbol(Button, Decl(tsxAttributesHasInferrableIndex.tsx, 11, 1))
+>someProp : Symbol(someProp, Decl(tsxAttributesHasInferrableIndex.tsx, 17, 18))
+>Button : Symbol(Button, Decl(tsxAttributesHasInferrableIndex.tsx, 11, 1))
diff --git a/tests/baselines/reference/tsxAttributesHasInferrableIndex.types b/tests/baselines/reference/tsxAttributesHasInferrableIndex.types
index 47e5be207ddae..c05aa996392a9 100644
--- a/tests/baselines/reference/tsxAttributesHasInferrableIndex.types
+++ b/tests/baselines/reference/tsxAttributesHasInferrableIndex.types
@@ -24,10 +24,12 @@ function createElement(name: string, attributes: Attributes | undefined, ...cont
>name : string
> : ^^^^^^
}
-namespace createElement.JSX {
- type Element = string;
+namespace createElement {
+ export namespace JSX {
+ export type Element = string;
>Element : string
> : ^^^^^^
+ }
}
function Button(attributes: Attributes | undefined, contents: string[]) {
@@ -43,10 +45,24 @@ function Button(attributes: Attributes | undefined, contents: string[]) {
> : ^^
}
const b =
->b : error
-> : error
+>b : string
+> : ^^^^^^
+> : string
+> : ^^^^^^
>Button : (attributes: Attributes | undefined, contents: string[]) => string
> : ^ ^^ ^^ ^^ ^^^^^^^^^^^
>Button : (attributes: Attributes | undefined, contents: string[]) => string
> : ^ ^^ ^^ ^^ ^^^^^^^^^^^
+const b2 =
+>b2 : string
+> : ^^^^^^
+> : string
+> : ^^^^^^
+>Button : (attributes: Attributes | undefined, contents: string[]) => string
+> : ^ ^^ ^^ ^^ ^^^^^^^^^^^
+>someProp : string
+> : ^^^^^^
+>Button : (attributes: Attributes | undefined, contents: string[]) => string
+> : ^ ^^ ^^ ^^ ^^^^^^^^^^^
+
diff --git a/tests/baselines/reference/tsxElementResolution16.errors.txt b/tests/baselines/reference/tsxElementResolution16.errors.txt
index 8faeb1d54b5cb..6b580f0bbaa44 100644
--- a/tests/baselines/reference/tsxElementResolution16.errors.txt
+++ b/tests/baselines/reference/tsxElementResolution16.errors.txt
@@ -1,7 +1,8 @@
+file.tsx(8,1): error TS2602: JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist.
file.tsx(8,1): error TS7026: JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists.
-==== file.tsx (1 errors) ====
+==== file.tsx (2 errors) ====
declare module JSX {
}
@@ -11,5 +12,7 @@ file.tsx(8,1): error TS7026: JSX element implicitly has type 'any' because no in
var obj1: Obj1;
; // Error (JSX.Element is implicit any)
~~~~~~~~~~~~~~~
+!!! error TS2602: JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist.
+ ~~~~~~~~~~~~~~~
!!! error TS7026: JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists.
\ No newline at end of file
diff --git a/tests/baselines/reference/tsxElementResolution20.errors.txt b/tests/baselines/reference/tsxElementResolution20.errors.txt
new file mode 100644
index 0000000000000..fabd7e8f244e2
--- /dev/null
+++ b/tests/baselines/reference/tsxElementResolution20.errors.txt
@@ -0,0 +1,16 @@
+file.tsx(9,1): error TS2602: JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist.
+
+
+==== file.tsx (1 errors) ====
+ declare namespace JSX {
+ interface IntrinsicElements { obj1: { x: number }; }
+ }
+
+ interface Obj1 {
+ new(n: string): {};
+ }
+ var obj1: Obj1;
+ ; // Error (JSX.Element is implicit any)
+ ~~~~~~~~~~~~~~~
+!!! error TS2602: JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist.
+
\ No newline at end of file
diff --git a/tests/baselines/reference/tsxElementResolution20.js b/tests/baselines/reference/tsxElementResolution20.js
new file mode 100644
index 0000000000000..c8ac83eab3ad9
--- /dev/null
+++ b/tests/baselines/reference/tsxElementResolution20.js
@@ -0,0 +1,17 @@
+//// [tests/cases/conformance/jsx/tsxElementResolution20.tsx] ////
+
+//// [file.tsx]
+declare namespace JSX {
+ interface IntrinsicElements { obj1: { x: number }; }
+}
+
+interface Obj1 {
+ new(n: string): {};
+}
+var obj1: Obj1;
+; // Error (JSX.Element is implicit any)
+
+
+//// [file.jsx]
+var obj1;
+; // Error (JSX.Element is implicit any)
diff --git a/tests/baselines/reference/tsxElementResolution20.symbols b/tests/baselines/reference/tsxElementResolution20.symbols
new file mode 100644
index 0000000000000..775ea70ca7c2c
--- /dev/null
+++ b/tests/baselines/reference/tsxElementResolution20.symbols
@@ -0,0 +1,26 @@
+//// [tests/cases/conformance/jsx/tsxElementResolution20.tsx] ////
+
+=== file.tsx ===
+declare namespace JSX {
+>JSX : Symbol(JSX, Decl(file.tsx, 0, 0))
+
+ interface IntrinsicElements { obj1: { x: number }; }
+>IntrinsicElements : Symbol(IntrinsicElements, Decl(file.tsx, 0, 23))
+>obj1 : Symbol(IntrinsicElements.obj1, Decl(file.tsx, 1, 33))
+>x : Symbol(x, Decl(file.tsx, 1, 41))
+}
+
+interface Obj1 {
+>Obj1 : Symbol(Obj1, Decl(file.tsx, 2, 1))
+
+ new(n: string): {};
+>n : Symbol(n, Decl(file.tsx, 5, 5))
+}
+var obj1: Obj1;
+>obj1 : Symbol(obj1, Decl(file.tsx, 7, 3))
+>Obj1 : Symbol(Obj1, Decl(file.tsx, 2, 1))
+
+; // Error (JSX.Element is implicit any)
+>obj1 : Symbol(JSX.IntrinsicElements.obj1, Decl(file.tsx, 1, 33))
+>x : Symbol(x, Decl(file.tsx, 8, 5))
+
diff --git a/tests/baselines/reference/tsxElementResolution20.types b/tests/baselines/reference/tsxElementResolution20.types
new file mode 100644
index 0000000000000..ec28c28bbedd3
--- /dev/null
+++ b/tests/baselines/reference/tsxElementResolution20.types
@@ -0,0 +1,30 @@
+//// [tests/cases/conformance/jsx/tsxElementResolution20.tsx] ////
+
+=== file.tsx ===
+declare namespace JSX {
+ interface IntrinsicElements { obj1: { x: number }; }
+>obj1 : { x: number; }
+> : ^^^^^ ^^^
+>x : number
+> : ^^^^^^
+}
+
+interface Obj1 {
+ new(n: string): {};
+>n : string
+> : ^^^^^^
+}
+var obj1: Obj1;
+>obj1 : Obj1
+> : ^^^^
+
+; // Error (JSX.Element is implicit any)
+> : any
+> : ^^^
+>obj1 : Obj1
+> : ^^^^
+>x : number
+> : ^^^^^^
+>10 : 10
+> : ^^
+
diff --git a/tests/baselines/reference/tsxElementResolution21.errors.txt b/tests/baselines/reference/tsxElementResolution21.errors.txt
new file mode 100644
index 0000000000000..2233a4558a5fd
--- /dev/null
+++ b/tests/baselines/reference/tsxElementResolution21.errors.txt
@@ -0,0 +1,20 @@
+tsxElementResolution21.tsx(10,11): error TS2602: JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist.
+tsxElementResolution21.tsx(10,11): error TS7026: JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists.
+
+
+==== tsxElementResolution21.tsx (2 errors) ====
+ function createElement(name: string) {
+ return name;
+ }
+ namespace createElement.JSX {
+ export type Element = string;
+ export type ElementType = string;
+ export type IntrinsicElements = { div: {} };
+ }
+
+ const d = // JSX namespace is not correctly defined here
+ ~~~~~~
+!!! error TS2602: JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist.
+ ~~~~~~
+!!! error TS7026: JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists.
+
\ No newline at end of file
diff --git a/tests/baselines/reference/tsxElementResolution21.symbols b/tests/baselines/reference/tsxElementResolution21.symbols
new file mode 100644
index 0000000000000..c72defe881f78
--- /dev/null
+++ b/tests/baselines/reference/tsxElementResolution21.symbols
@@ -0,0 +1,28 @@
+//// [tests/cases/conformance/jsx/tsxElementResolution21.tsx] ////
+
+=== tsxElementResolution21.tsx ===
+function createElement(name: string) {
+>createElement : Symbol(createElement, Decl(tsxElementResolution21.tsx, 0, 0), Decl(tsxElementResolution21.tsx, 2, 1))
+>name : Symbol(name, Decl(tsxElementResolution21.tsx, 0, 23))
+
+ return name;
+>name : Symbol(name, Decl(tsxElementResolution21.tsx, 0, 23))
+}
+namespace createElement.JSX {
+>createElement : Symbol(createElement, Decl(tsxElementResolution21.tsx, 0, 0), Decl(tsxElementResolution21.tsx, 2, 1))
+>JSX : Symbol(JSX, Decl(tsxElementResolution21.tsx, 3, 24))
+
+ export type Element = string;
+>Element : Symbol(Element, Decl(tsxElementResolution21.tsx, 3, 29))
+
+ export type ElementType = string;
+>ElementType : Symbol(ElementType, Decl(tsxElementResolution21.tsx, 4, 33))
+
+ export type IntrinsicElements = { div: {} };
+>IntrinsicElements : Symbol(IntrinsicElements, Decl(tsxElementResolution21.tsx, 5, 37))
+>div : Symbol(div, Decl(tsxElementResolution21.tsx, 6, 37))
+}
+
+const d = // JSX namespace is not correctly defined here
+>d : Symbol(d, Decl(tsxElementResolution21.tsx, 9, 5))
+
diff --git a/tests/baselines/reference/tsxElementResolution21.types b/tests/baselines/reference/tsxElementResolution21.types
new file mode 100644
index 0000000000000..5aa8600ca74cb
--- /dev/null
+++ b/tests/baselines/reference/tsxElementResolution21.types
@@ -0,0 +1,37 @@
+//// [tests/cases/conformance/jsx/tsxElementResolution21.tsx] ////
+
+=== tsxElementResolution21.tsx ===
+function createElement(name: string) {
+>createElement : (name: string) => string
+> : ^ ^^ ^^^^^^^^^^^
+>name : string
+> : ^^^^^^
+
+ return name;
+>name : string
+> : ^^^^^^
+}
+namespace createElement.JSX {
+ export type Element = string;
+>Element : string
+> : ^^^^^^
+
+ export type ElementType = string;
+>ElementType : string
+> : ^^^^^^
+
+ export type IntrinsicElements = { div: {} };
+>IntrinsicElements : IntrinsicElements
+> : ^^^^^^^^^^^^^^^^^
+>div : {}
+> : ^^
+}
+
+const d = // JSX namespace is not correctly defined here
+>d : any
+> : ^^^
+> : any
+> : ^^^
+>div : any
+> : ^^^
+
diff --git a/tests/baselines/reference/tsxElementResolution22.errors.txt b/tests/baselines/reference/tsxElementResolution22.errors.txt
new file mode 100644
index 0000000000000..3ca57a3349063
--- /dev/null
+++ b/tests/baselines/reference/tsxElementResolution22.errors.txt
@@ -0,0 +1,20 @@
+tsxElementResolution22.tsx(10,11): error TS2602: JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist.
+tsxElementResolution22.tsx(10,11): error TS7026: JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists.
+
+
+==== tsxElementResolution22.tsx (2 errors) ====
+ function createElement(name: string) {
+ return name;
+ }
+ namespace createElement.JSX {
+ type Element = string;
+ type ElementType = string;
+ type IntrinsicElements = { div: {} };
+ }
+
+ const d = // JSX namespace is not correctly defined here
+ ~~~~~~
+!!! error TS2602: JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist.
+ ~~~~~~
+!!! error TS7026: JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists.
+
\ No newline at end of file
diff --git a/tests/baselines/reference/tsxElementResolution22.symbols b/tests/baselines/reference/tsxElementResolution22.symbols
new file mode 100644
index 0000000000000..4fb9202286485
--- /dev/null
+++ b/tests/baselines/reference/tsxElementResolution22.symbols
@@ -0,0 +1,28 @@
+//// [tests/cases/conformance/jsx/tsxElementResolution22.tsx] ////
+
+=== tsxElementResolution22.tsx ===
+function createElement(name: string) {
+>createElement : Symbol(createElement, Decl(tsxElementResolution22.tsx, 0, 0), Decl(tsxElementResolution22.tsx, 2, 1))
+>name : Symbol(name, Decl(tsxElementResolution22.tsx, 0, 23))
+
+ return name;
+>name : Symbol(name, Decl(tsxElementResolution22.tsx, 0, 23))
+}
+namespace createElement.JSX {
+>createElement : Symbol(createElement, Decl(tsxElementResolution22.tsx, 0, 0), Decl(tsxElementResolution22.tsx, 2, 1))
+>JSX : Symbol(JSX, Decl(tsxElementResolution22.tsx, 3, 24))
+
+ type Element = string;
+>Element : Symbol(Element, Decl(tsxElementResolution22.tsx, 3, 29))
+
+ type ElementType = string;
+>ElementType : Symbol(ElementType, Decl(tsxElementResolution22.tsx, 4, 26))
+
+ type IntrinsicElements = { div: {} };
+>IntrinsicElements : Symbol(IntrinsicElements, Decl(tsxElementResolution22.tsx, 5, 30))
+>div : Symbol(div, Decl(tsxElementResolution22.tsx, 6, 30))
+}
+
+const d = // JSX namespace is not correctly defined here
+>d : Symbol(d, Decl(tsxElementResolution22.tsx, 9, 5))
+
diff --git a/tests/baselines/reference/tsxElementResolution22.types b/tests/baselines/reference/tsxElementResolution22.types
new file mode 100644
index 0000000000000..5d573985aa705
--- /dev/null
+++ b/tests/baselines/reference/tsxElementResolution22.types
@@ -0,0 +1,37 @@
+//// [tests/cases/conformance/jsx/tsxElementResolution22.tsx] ////
+
+=== tsxElementResolution22.tsx ===
+function createElement(name: string) {
+>createElement : (name: string) => string
+> : ^ ^^ ^^^^^^^^^^^
+>name : string
+> : ^^^^^^
+
+ return name;
+>name : string
+> : ^^^^^^
+}
+namespace createElement.JSX {
+ type Element = string;
+>Element : string
+> : ^^^^^^
+
+ type ElementType = string;
+>ElementType : string
+> : ^^^^^^
+
+ type IntrinsicElements = { div: {} };
+>IntrinsicElements : IntrinsicElements
+> : ^^^^^^^^^^^^^^^^^
+>div : {}
+> : ^^
+}
+
+const d = // JSX namespace is not correctly defined here
+>d : any
+> : ^^^
+> : any
+> : ^^^
+>div : any
+> : ^^^
+
diff --git a/tests/baselines/reference/tsxSpreadInvalidType.errors.txt b/tests/baselines/reference/tsxSpreadInvalidType.errors.txt
index 4e60f9f657139..25a339755d92a 100644
--- a/tests/baselines/reference/tsxSpreadInvalidType.errors.txt
+++ b/tests/baselines/reference/tsxSpreadInvalidType.errors.txt
@@ -1,11 +1,12 @@
-a.tsx(9,21): error TS2698: Spread types may only be created from object types.
a.tsx(10,21): error TS2698: Spread types may only be created from object types.
a.tsx(11,21): error TS2698: Spread types may only be created from object types.
+a.tsx(12,21): error TS2698: Spread types may only be created from object types.
==== a.tsx (3 errors) ====
namespace JSX {
export interface IntrinsicElements { [key: string]: any }
+ export interface Element
{ props: P; type: T; }
}
const a = {} as never;
diff --git a/tests/baselines/reference/tsxSpreadInvalidType.js b/tests/baselines/reference/tsxSpreadInvalidType.js
index ae7dbea85e1aa..cccebe721d699 100644
--- a/tests/baselines/reference/tsxSpreadInvalidType.js
+++ b/tests/baselines/reference/tsxSpreadInvalidType.js
@@ -3,6 +3,7 @@
//// [a.tsx]
namespace JSX {
export interface IntrinsicElements { [key: string]: any }
+ export interface Element