diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 43c9818e623..982d9d9b822 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -26955,6 +26955,9 @@ namespace ts {
errorOutputContainer);
function checkTagNameDoesNotExpectTooManyArguments(): boolean {
+ if (getJsxNamespaceContainerForImplicitImport(node)) {
+ return true; // factory is implicitly jsx/jsxdev - assume it fits the bill, since we don't strongly look for the jsx/jsxs/jsxDEV factory APIs anywhere else (at least not yet)
+ }
const tagType = isJsxOpeningElement(node) || isJsxSelfClosingElement(node) && !isJsxIntrinsicIdentifier(node.tagName) ? checkExpression(node.tagName) : undefined;
if (!tagType) {
return true;
diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).errors.txt b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).errors.txt
new file mode 100644
index 00000000000..95387157d76
--- /dev/null
+++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).errors.txt
@@ -0,0 +1,17 @@
+tests/cases/compiler/index.tsx(3,1): error TS6133: 'React' is declared but its value is never read.
+
+
+==== tests/cases/compiler/index.tsx (1 errors) ====
+ ///
+
+ import React from "react";
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS6133: 'React' is declared but its value is never read.
+
+ function Bar() {
+ return
;
+ }
+
+ export function Foo() {
+ return ;
+ }
\ No newline at end of file
diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).js b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).js
new file mode 100644
index 00000000000..2d8f1afe0fb
--- /dev/null
+++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).js
@@ -0,0 +1,25 @@
+//// [index.tsx]
+///
+
+import React from "react";
+
+function Bar() {
+ return ;
+}
+
+export function Foo() {
+ return ;
+}
+
+//// [index.js]
+"use strict";
+exports.__esModule = true;
+exports.Foo = void 0;
+var jsx_runtime_1 = require("react/jsx-runtime");
+function Bar() {
+ return jsx_runtime_1.jsx("div", {}, void 0);
+}
+function Foo() {
+ return jsx_runtime_1.jsx(Bar, {}, void 0);
+}
+exports.Foo = Foo;
diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).symbols b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).symbols
new file mode 100644
index 00000000000..f7edf35f27f
--- /dev/null
+++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).symbols
@@ -0,0 +1,19 @@
+=== tests/cases/compiler/index.tsx ===
+///
+
+import React from "react";
+>React : Symbol(React, Decl(index.tsx, 2, 6))
+
+function Bar() {
+>Bar : Symbol(Bar, Decl(index.tsx, 2, 26))
+
+ return ;
+>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2420, 114))
+}
+
+export function Foo() {
+>Foo : Symbol(Foo, Decl(index.tsx, 6, 1))
+
+ return ;
+>Bar : Symbol(Bar, Decl(index.tsx, 2, 26))
+}
diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).types b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).types
new file mode 100644
index 00000000000..61c607c3c1d
--- /dev/null
+++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).types
@@ -0,0 +1,21 @@
+=== tests/cases/compiler/index.tsx ===
+///
+
+import React from "react";
+>React : typeof React
+
+function Bar() {
+>Bar : () => JSX.Element
+
+ return ;
+> : JSX.Element
+>div : any
+}
+
+export function Foo() {
+>Foo : () => JSX.Element
+
+ return ;
+> : JSX.Element
+>Bar : () => JSX.Element
+}
diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).errors.txt b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).errors.txt
new file mode 100644
index 00000000000..95387157d76
--- /dev/null
+++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).errors.txt
@@ -0,0 +1,17 @@
+tests/cases/compiler/index.tsx(3,1): error TS6133: 'React' is declared but its value is never read.
+
+
+==== tests/cases/compiler/index.tsx (1 errors) ====
+ ///
+
+ import React from "react";
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS6133: 'React' is declared but its value is never read.
+
+ function Bar() {
+ return ;
+ }
+
+ export function Foo() {
+ return ;
+ }
\ No newline at end of file
diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).js b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).js
new file mode 100644
index 00000000000..c7235c7eaeb
--- /dev/null
+++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).js
@@ -0,0 +1,26 @@
+//// [index.tsx]
+///
+
+import React from "react";
+
+function Bar() {
+ return ;
+}
+
+export function Foo() {
+ return ;
+}
+
+//// [index.js]
+"use strict";
+exports.__esModule = true;
+exports.Foo = void 0;
+var jsx_dev_runtime_1 = require("react/jsx-dev-runtime");
+var _jsxFileName = "tests/cases/compiler/index.tsx";
+function Bar() {
+ return jsx_dev_runtime_1.jsxDEV("div", {}, void 0, false, { fileName: _jsxFileName, lineNumber: 6, columnNumber: 9 }, this);
+}
+function Foo() {
+ return jsx_dev_runtime_1.jsxDEV(Bar, {}, void 0, false, { fileName: _jsxFileName, lineNumber: 10, columnNumber: 9 }, this);
+}
+exports.Foo = Foo;
diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).symbols b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).symbols
new file mode 100644
index 00000000000..f7edf35f27f
--- /dev/null
+++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).symbols
@@ -0,0 +1,19 @@
+=== tests/cases/compiler/index.tsx ===
+///
+
+import React from "react";
+>React : Symbol(React, Decl(index.tsx, 2, 6))
+
+function Bar() {
+>Bar : Symbol(Bar, Decl(index.tsx, 2, 26))
+
+ return ;
+>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2420, 114))
+}
+
+export function Foo() {
+>Foo : Symbol(Foo, Decl(index.tsx, 6, 1))
+
+ return ;
+>Bar : Symbol(Bar, Decl(index.tsx, 2, 26))
+}
diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).types b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).types
new file mode 100644
index 00000000000..61c607c3c1d
--- /dev/null
+++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).types
@@ -0,0 +1,21 @@
+=== tests/cases/compiler/index.tsx ===
+///
+
+import React from "react";
+>React : typeof React
+
+function Bar() {
+>Bar : () => JSX.Element
+
+ return ;
+> : JSX.Element
+>div : any
+}
+
+export function Foo() {
+>Foo : () => JSX.Element
+
+ return ;
+> : JSX.Element
+>Bar : () => JSX.Element
+}
diff --git a/tests/cases/compiler/reactImportUnusedInNewJSXEmit.tsx b/tests/cases/compiler/reactImportUnusedInNewJSXEmit.tsx
new file mode 100644
index 00000000000..88a7e2b2b53
--- /dev/null
+++ b/tests/cases/compiler/reactImportUnusedInNewJSXEmit.tsx
@@ -0,0 +1,16 @@
+// @esModuleInterop: true
+// @noUnusedLocals: true
+// @jsx: react-jsx,react-jsxdev
+// @skipLibCheck: true
+// @filename: index.tsx
+///
+
+import React from "react";
+
+function Bar() {
+ return ;
+}
+
+export function Foo() {
+ return ;
+}
\ No newline at end of file