diff --git a/tests/baselines/reference/tsxSfcReturnNull.js b/tests/baselines/reference/tsxSfcReturnNull.js
new file mode 100644
index 00000000000..8a332a7057f
--- /dev/null
+++ b/tests/baselines/reference/tsxSfcReturnNull.js
@@ -0,0 +1,24 @@
+//// [file.tsx]
+
+import React = require('react');
+
+const Foo = (props: any) => null;
+
+function Greet(x: {name?: string}) {
+ return null;
+}
+
+const foo = ;
+const G = ;
+
+//// [file.jsx]
+define(["require", "exports", "react"], function (require, exports, React) {
+ "use strict";
+ exports.__esModule = true;
+ var Foo = function (props) { return null; };
+ function Greet(x) {
+ return null;
+ }
+ var foo = ;
+ var G = ;
+});
diff --git a/tests/baselines/reference/tsxSfcReturnNull.symbols b/tests/baselines/reference/tsxSfcReturnNull.symbols
new file mode 100644
index 00000000000..483b7db6c59
--- /dev/null
+++ b/tests/baselines/reference/tsxSfcReturnNull.symbols
@@ -0,0 +1,25 @@
+=== tests/cases/conformance/jsx/file.tsx ===
+
+import React = require('react');
+>React : Symbol(React, Decl(file.tsx, 0, 0))
+
+const Foo = (props: any) => null;
+>Foo : Symbol(Foo, Decl(file.tsx, 3, 5))
+>props : Symbol(props, Decl(file.tsx, 3, 13))
+
+function Greet(x: {name?: string}) {
+>Greet : Symbol(Greet, Decl(file.tsx, 3, 33))
+>x : Symbol(x, Decl(file.tsx, 5, 15))
+>name : Symbol(name, Decl(file.tsx, 5, 19))
+
+ return null;
+}
+
+const foo = ;
+>foo : Symbol(foo, Decl(file.tsx, 9, 5))
+>Foo : Symbol(Foo, Decl(file.tsx, 3, 5))
+
+const G = ;
+>G : Symbol(G, Decl(file.tsx, 10, 5))
+>Greet : Symbol(Greet, Decl(file.tsx, 3, 33))
+
diff --git a/tests/baselines/reference/tsxSfcReturnNull.types b/tests/baselines/reference/tsxSfcReturnNull.types
new file mode 100644
index 00000000000..edc346b03e6
--- /dev/null
+++ b/tests/baselines/reference/tsxSfcReturnNull.types
@@ -0,0 +1,30 @@
+=== tests/cases/conformance/jsx/file.tsx ===
+
+import React = require('react');
+>React : typeof React
+
+const Foo = (props: any) => null;
+>Foo : (props: any) => any
+>(props: any) => null : (props: any) => any
+>props : any
+>null : null
+
+function Greet(x: {name?: string}) {
+>Greet : (x: { name?: string; }) => any
+>x : { name?: string; }
+>name : string
+
+ return null;
+>null : null
+}
+
+const foo = ;
+>foo : JSX.Element
+> : JSX.Element
+>Foo : (props: any) => any
+
+const G = ;
+>G : JSX.Element
+> : JSX.Element
+>Greet : (x: { name?: string; }) => any
+
diff --git a/tests/baselines/reference/tsxSfcReturnNullStrictNullChecks.js b/tests/baselines/reference/tsxSfcReturnNullStrictNullChecks.js
new file mode 100644
index 00000000000..8a332a7057f
--- /dev/null
+++ b/tests/baselines/reference/tsxSfcReturnNullStrictNullChecks.js
@@ -0,0 +1,24 @@
+//// [file.tsx]
+
+import React = require('react');
+
+const Foo = (props: any) => null;
+
+function Greet(x: {name?: string}) {
+ return null;
+}
+
+const foo = ;
+const G = ;
+
+//// [file.jsx]
+define(["require", "exports", "react"], function (require, exports, React) {
+ "use strict";
+ exports.__esModule = true;
+ var Foo = function (props) { return null; };
+ function Greet(x) {
+ return null;
+ }
+ var foo = ;
+ var G = ;
+});
diff --git a/tests/baselines/reference/tsxSfcReturnNullStrictNullChecks.symbols b/tests/baselines/reference/tsxSfcReturnNullStrictNullChecks.symbols
new file mode 100644
index 00000000000..483b7db6c59
--- /dev/null
+++ b/tests/baselines/reference/tsxSfcReturnNullStrictNullChecks.symbols
@@ -0,0 +1,25 @@
+=== tests/cases/conformance/jsx/file.tsx ===
+
+import React = require('react');
+>React : Symbol(React, Decl(file.tsx, 0, 0))
+
+const Foo = (props: any) => null;
+>Foo : Symbol(Foo, Decl(file.tsx, 3, 5))
+>props : Symbol(props, Decl(file.tsx, 3, 13))
+
+function Greet(x: {name?: string}) {
+>Greet : Symbol(Greet, Decl(file.tsx, 3, 33))
+>x : Symbol(x, Decl(file.tsx, 5, 15))
+>name : Symbol(name, Decl(file.tsx, 5, 19))
+
+ return null;
+}
+
+const foo = ;
+>foo : Symbol(foo, Decl(file.tsx, 9, 5))
+>Foo : Symbol(Foo, Decl(file.tsx, 3, 5))
+
+const G = ;
+>G : Symbol(G, Decl(file.tsx, 10, 5))
+>Greet : Symbol(Greet, Decl(file.tsx, 3, 33))
+
diff --git a/tests/baselines/reference/tsxSfcReturnNullStrictNullChecks.types b/tests/baselines/reference/tsxSfcReturnNullStrictNullChecks.types
new file mode 100644
index 00000000000..5268592b8d7
--- /dev/null
+++ b/tests/baselines/reference/tsxSfcReturnNullStrictNullChecks.types
@@ -0,0 +1,30 @@
+=== tests/cases/conformance/jsx/file.tsx ===
+
+import React = require('react');
+>React : typeof React
+
+const Foo = (props: any) => null;
+>Foo : (props: any) => null
+>(props: any) => null : (props: any) => null
+>props : any
+>null : null
+
+function Greet(x: {name?: string}) {
+>Greet : (x: { name?: string | undefined; }) => null
+>x : { name?: string | undefined; }
+>name : string | undefined
+
+ return null;
+>null : null
+}
+
+const foo = ;
+>foo : JSX.Element
+> : JSX.Element
+>Foo : (props: any) => null
+
+const G = ;
+>G : JSX.Element
+> : JSX.Element
+>Greet : (x: { name?: string | undefined; }) => null
+
diff --git a/tests/baselines/reference/tsxSfcReturnUndefinedStrictNullChecks.errors.txt b/tests/baselines/reference/tsxSfcReturnUndefinedStrictNullChecks.errors.txt
new file mode 100644
index 00000000000..127eb4b0d44
--- /dev/null
+++ b/tests/baselines/reference/tsxSfcReturnUndefinedStrictNullChecks.errors.txt
@@ -0,0 +1,20 @@
+tests/cases/conformance/jsx/file.tsx(10,13): error TS2605: JSX element type 'undefined' is not a constructor function for JSX elements.
+tests/cases/conformance/jsx/file.tsx(11,11): error TS2605: JSX element type 'undefined' is not a constructor function for JSX elements.
+
+
+==== tests/cases/conformance/jsx/file.tsx (2 errors) ====
+
+ import React = require('react');
+
+ const Foo = (props: any) => undefined;
+ function Greet(x: {name?: string}) {
+ return undefined;
+ }
+
+ // Error
+ const foo = ;
+ ~~~~~~~
+!!! error TS2605: JSX element type 'undefined' is not a constructor function for JSX elements.
+ const G = ;
+ ~~~~~~~~~
+!!! error TS2605: JSX element type 'undefined' is not a constructor function for JSX elements.
\ No newline at end of file
diff --git a/tests/baselines/reference/tsxSfcReturnUndefinedStrictNullChecks.js b/tests/baselines/reference/tsxSfcReturnUndefinedStrictNullChecks.js
new file mode 100644
index 00000000000..0fcaa2f1689
--- /dev/null
+++ b/tests/baselines/reference/tsxSfcReturnUndefinedStrictNullChecks.js
@@ -0,0 +1,25 @@
+//// [file.tsx]
+
+import React = require('react');
+
+const Foo = (props: any) => undefined;
+function Greet(x: {name?: string}) {
+ return undefined;
+}
+
+// Error
+const foo = ;
+const G = ;
+
+//// [file.jsx]
+define(["require", "exports", "react"], function (require, exports, React) {
+ "use strict";
+ exports.__esModule = true;
+ var Foo = function (props) { return undefined; };
+ function Greet(x) {
+ return undefined;
+ }
+ // Error
+ var foo = ;
+ var G = ;
+});
diff --git a/tests/cases/conformance/jsx/tsxSfcReturnNull.tsx b/tests/cases/conformance/jsx/tsxSfcReturnNull.tsx
new file mode 100644
index 00000000000..436b361eaf8
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSfcReturnNull.tsx
@@ -0,0 +1,16 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @module: amd
+// @noLib: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+const Foo = (props: any) => null;
+
+function Greet(x: {name?: string}) {
+ return null;
+}
+
+const foo = ;
+const G = ;
\ No newline at end of file
diff --git a/tests/cases/conformance/jsx/tsxSfcReturnNullStrictNullChecks.tsx b/tests/cases/conformance/jsx/tsxSfcReturnNullStrictNullChecks.tsx
new file mode 100644
index 00000000000..cbc7218698f
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSfcReturnNullStrictNullChecks.tsx
@@ -0,0 +1,17 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @module: amd
+// @noLib: true
+// @strictNullChecks: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+const Foo = (props: any) => null;
+
+function Greet(x: {name?: string}) {
+ return null;
+}
+
+const foo = ;
+const G = ;
\ No newline at end of file
diff --git a/tests/cases/conformance/jsx/tsxSfcReturnUndefinedStrictNullChecks.tsx b/tests/cases/conformance/jsx/tsxSfcReturnUndefinedStrictNullChecks.tsx
new file mode 100644
index 00000000000..cb0c6444e73
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSfcReturnUndefinedStrictNullChecks.tsx
@@ -0,0 +1,17 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @module: amd
+// @noLib: true
+// @strictNullChecks: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+const Foo = (props: any) => undefined;
+function Greet(x: {name?: string}) {
+ return undefined;
+}
+
+// Error
+const foo = ;
+const G = ;
\ No newline at end of file