diff --git a/tests/baselines/reference/reactNamespaceImportPresevation.js b/tests/baselines/reference/reactNamespaceImportPresevation.js
new file mode 100644
index 00000000000..5c44674d031
--- /dev/null
+++ b/tests/baselines/reference/reactNamespaceImportPresevation.js
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/reactNamespaceImportPresevation.tsx] ////
+
+//// [modules.d.ts]
+
+declare module "my-React-Lib" {
+ var a: any;
+ export = a;
+}
+
+//// [test.tsx]
+import * as myReactLib from "my-React-Lib"; // should not be elided
+declare var foo: any;
+
+;
+
+
+//// [test.jsx]
+"use strict";
+var myReactLib = require("my-React-Lib"); // should not be elided
+;
diff --git a/tests/baselines/reference/reactNamespaceImportPresevation.symbols b/tests/baselines/reference/reactNamespaceImportPresevation.symbols
new file mode 100644
index 00000000000..8a4407c8160
--- /dev/null
+++ b/tests/baselines/reference/reactNamespaceImportPresevation.symbols
@@ -0,0 +1,20 @@
+=== tests/cases/compiler/modules.d.ts ===
+
+declare module "my-React-Lib" {
+ var a: any;
+>a : Symbol(a, Decl(modules.d.ts, 2, 7))
+
+ export = a;
+>a : Symbol(a, Decl(modules.d.ts, 2, 7))
+}
+
+=== tests/cases/compiler/test.tsx ===
+import * as myReactLib from "my-React-Lib"; // should not be elided
+>myReactLib : Symbol(myReactLib, Decl(test.tsx, 0, 6))
+
+declare var foo: any;
+>foo : Symbol(foo, Decl(test.tsx, 1, 11))
+
+;
+>data : Symbol(unknown)
+
diff --git a/tests/baselines/reference/reactNamespaceImportPresevation.types b/tests/baselines/reference/reactNamespaceImportPresevation.types
new file mode 100644
index 00000000000..adb1d60d2d5
--- /dev/null
+++ b/tests/baselines/reference/reactNamespaceImportPresevation.types
@@ -0,0 +1,22 @@
+=== tests/cases/compiler/modules.d.ts ===
+
+declare module "my-React-Lib" {
+ var a: any;
+>a : any
+
+ export = a;
+>a : any
+}
+
+=== tests/cases/compiler/test.tsx ===
+import * as myReactLib from "my-React-Lib"; // should not be elided
+>myReactLib : any
+
+declare var foo: any;
+>foo : any
+
+;
+> : any
+>foo : any
+>data : any
+
diff --git a/tests/baselines/reference/reactNamespaceJSXEmit.js b/tests/baselines/reference/reactNamespaceJSXEmit.js
new file mode 100644
index 00000000000..26967d56b7b
--- /dev/null
+++ b/tests/baselines/reference/reactNamespaceJSXEmit.js
@@ -0,0 +1,20 @@
+//// [reactNamespaceJSXEmit.tsx]
+
+declare var myReactLib: any;
+declare var foo: any;
+declare var Bar: any;
+declare var x: any;
+
+;
+;
+;
+;
+;
+
+
+//// [reactNamespaceJSXEmit.js]
+myReactLib.createElement("foo", {data: true});
+myReactLib.createElement(Bar, {x: x});
+myReactLib.createElement("x-component", null);
+myReactLib.createElement(Bar, myReactLib.__spread({}, x));
+myReactLib.createElement(Bar, myReactLib.__spread({}, x, {y: 2}));
diff --git a/tests/baselines/reference/reactNamespaceJSXEmit.symbols b/tests/baselines/reference/reactNamespaceJSXEmit.symbols
new file mode 100644
index 00000000000..d79c1cf531e
--- /dev/null
+++ b/tests/baselines/reference/reactNamespaceJSXEmit.symbols
@@ -0,0 +1,32 @@
+=== tests/cases/compiler/reactNamespaceJSXEmit.tsx ===
+
+declare var myReactLib: any;
+>myReactLib : Symbol(myReactLib, Decl(reactNamespaceJSXEmit.tsx, 1, 11))
+
+declare var foo: any;
+>foo : Symbol(foo, Decl(reactNamespaceJSXEmit.tsx, 2, 11))
+
+declare var Bar: any;
+>Bar : Symbol(Bar, Decl(reactNamespaceJSXEmit.tsx, 3, 11))
+
+declare var x: any;
+>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11))
+
+;
+>data : Symbol(unknown)
+
+;
+>Bar : Symbol(Bar, Decl(reactNamespaceJSXEmit.tsx, 3, 11))
+>x : Symbol(unknown)
+>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11))
+
+;
+;
+>Bar : Symbol(Bar, Decl(reactNamespaceJSXEmit.tsx, 3, 11))
+>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11))
+
+;
+>Bar : Symbol(Bar, Decl(reactNamespaceJSXEmit.tsx, 3, 11))
+>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11))
+>y : Symbol(unknown)
+
diff --git a/tests/baselines/reference/reactNamespaceJSXEmit.types b/tests/baselines/reference/reactNamespaceJSXEmit.types
new file mode 100644
index 00000000000..06c803ef7fd
--- /dev/null
+++ b/tests/baselines/reference/reactNamespaceJSXEmit.types
@@ -0,0 +1,41 @@
+=== tests/cases/compiler/reactNamespaceJSXEmit.tsx ===
+
+declare var myReactLib: any;
+>myReactLib : any
+
+declare var foo: any;
+>foo : any
+
+declare var Bar: any;
+>Bar : any
+
+declare var x: any;
+>x : any
+
+;
+> : any
+>foo : any
+>data : any
+
+;
+> : any
+>Bar : any
+>x : any
+>x : any
+
+;
+> : any
+>x-component : any
+
+;
+> : any
+>Bar : any
+>x : any
+
+;
+> : any
+>Bar : any
+>x : any
+>y : any
+>2 : number
+
diff --git a/tests/baselines/reference/reactNamespaceMissingDeclaration.errors.txt b/tests/baselines/reference/reactNamespaceMissingDeclaration.errors.txt
new file mode 100644
index 00000000000..f87d223f824
--- /dev/null
+++ b/tests/baselines/reference/reactNamespaceMissingDeclaration.errors.txt
@@ -0,0 +1,9 @@
+tests/cases/compiler/reactNamespaceMissingDeclaration.tsx(3,2): error TS2304: Cannot find name 'myReactLib'.
+
+
+==== tests/cases/compiler/reactNamespaceMissingDeclaration.tsx (1 errors) ====
+
+ // Error myReactLib not declared
+
+ ~~~
+!!! error TS2304: Cannot find name 'myReactLib'.
\ No newline at end of file
diff --git a/tests/baselines/reference/reactNamespaceMissingDeclaration.js b/tests/baselines/reference/reactNamespaceMissingDeclaration.js
new file mode 100644
index 00000000000..d972f319f8f
--- /dev/null
+++ b/tests/baselines/reference/reactNamespaceMissingDeclaration.js
@@ -0,0 +1,8 @@
+//// [reactNamespaceMissingDeclaration.tsx]
+
+// Error myReactLib not declared
+
+
+//// [reactNamespaceMissingDeclaration.js]
+// Error myReactLib not declared
+myReactLib.createElement("foo", {data: true});
diff --git a/tests/cases/compiler/reactNamespaceImportPresevation.tsx b/tests/cases/compiler/reactNamespaceImportPresevation.tsx
new file mode 100644
index 00000000000..ec7e5d0d6ac
--- /dev/null
+++ b/tests/cases/compiler/reactNamespaceImportPresevation.tsx
@@ -0,0 +1,15 @@
+//@jsx: preserve
+//@module: commonjs
+//@reactNamespace: myReactLib
+
+//@filename: modules.d.ts
+declare module "my-React-Lib" {
+ var a: any;
+ export = a;
+}
+
+//@filename: test.tsx
+import * as myReactLib from "my-React-Lib"; // should not be elided
+declare var foo: any;
+
+;
diff --git a/tests/cases/compiler/reactNamespaceJSXEmit.tsx b/tests/cases/compiler/reactNamespaceJSXEmit.tsx
new file mode 100644
index 00000000000..a3ed9aea4e3
--- /dev/null
+++ b/tests/cases/compiler/reactNamespaceJSXEmit.tsx
@@ -0,0 +1,13 @@
+//@jsx: react
+//@reactNamespace: myReactLib
+
+declare var myReactLib: any;
+declare var foo: any;
+declare var Bar: any;
+declare var x: any;
+
+;
+;
+;
+;
+;
diff --git a/tests/cases/compiler/reactNamespaceMissingDeclaration.tsx b/tests/cases/compiler/reactNamespaceMissingDeclaration.tsx
new file mode 100644
index 00000000000..fdfed629606
--- /dev/null
+++ b/tests/cases/compiler/reactNamespaceMissingDeclaration.tsx
@@ -0,0 +1,5 @@
+//@jsx: react
+//@reactNamespace: myReactLib
+
+// Error myReactLib not declared
+
\ No newline at end of file