diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts
index 32ea13b6338..a8f43c185e8 100644
--- a/src/compiler/emitter.ts
+++ b/src/compiler/emitter.ts
@@ -6463,7 +6463,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
function trimReactWhitespace(node: JsxText): string {
let result: string = undefined;
- let text = getTextOfNode(node);
+ let text = getTextOfNode(node, true);
let firstNonWhitespace = 0;
let lastNonWhitespace = -1;
@@ -6498,7 +6498,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
switch (compilerOptions.jsx) {
case JsxEmit.React:
let text = trimReactWhitespace(node);
- if (text.length === 0) {
+ if (text === undefined || text.length === 0) {
return undefined;
}
else {
diff --git a/tests/baselines/reference/tsxReactEmit1.js b/tests/baselines/reference/tsxReactEmit1.js
index f1799e5bb77..260bd9cd228 100644
--- a/tests/baselines/reference/tsxReactEmit1.js
+++ b/tests/baselines/reference/tsxReactEmit1.js
@@ -69,6 +69,6 @@ var SomeClass = (function () {
};
return SomeClass;
})();
-var whitespace1 = React.createElement("div", null);
-var whitespace2 = React.createElement("div", null, p);
+var whitespace1 = React.createElement("div", null, " ");
+var whitespace2 = React.createElement("div", null, " ", p, " ");
var whitespace3 = React.createElement("div", null, p);
diff --git a/tests/baselines/reference/tsxReactEmit3.js b/tests/baselines/reference/tsxReactEmit3.js
index 1a6ba037230..23910548534 100644
--- a/tests/baselines/reference/tsxReactEmit3.js
+++ b/tests/baselines/reference/tsxReactEmit3.js
@@ -8,4 +8,4 @@ declare var Foo, Bar, baz;
q s ;
//// [tsxReactEmit3.js]
-React.createElement(Foo, null, React.createElement(Bar, null, "q "), React.createElement(Bar, null), "s ", React.createElement(Bar, null), React.createElement(Bar, null));
+React.createElement(Foo, null, " ", React.createElement(Bar, null, " q "), " ", React.createElement(Bar, null), " s ", React.createElement(Bar, null), React.createElement(Bar, null));
diff --git a/tests/baselines/reference/tsxReactEmitWhitespace.js b/tests/baselines/reference/tsxReactEmitWhitespace.js
index a124ce73312..a1b5894106f 100644
--- a/tests/baselines/reference/tsxReactEmitWhitespace.js
+++ b/tests/baselines/reference/tsxReactEmitWhitespace.js
@@ -57,17 +57,17 @@ var p = 0;
// WHITESPACE, DO NOT RUN 'FORMAT DOCUMENT' ON IT
var p = 0;
// Emit " "
-React.createElement("div", null);
+React.createElement("div", null, " ");
// Emit " ", p, " "
-React.createElement("div", null, p);
+React.createElement("div", null, " ", p, " ");
// Emit only p
React.createElement("div", null, p);
// Emit only p
React.createElement("div", null, p);
// Emit " 3"
-React.createElement("div", null, "3");
+React.createElement("div", null, " 3");
// Emit " 3 "
-React.createElement("div", null, "3 ");
+React.createElement("div", null, " 3 ");
// Emit "3"
React.createElement("div", null, "3");
// Emit no args
diff --git a/tests/baselines/reference/tsxReactEmitWhitespace2.js b/tests/baselines/reference/tsxReactEmitWhitespace2.js
new file mode 100644
index 00000000000..091a193cdc5
--- /dev/null
+++ b/tests/baselines/reference/tsxReactEmitWhitespace2.js
@@ -0,0 +1,25 @@
+//// [tsxReactEmitWhitespace2.tsx]
+declare module JSX {
+ interface Element { }
+ interface IntrinsicElements {
+ [s: string]: any;
+ }
+}
+declare var React: any;
+
+// Emit ' word' in the last string
+
word code word
;
+// Same here
+code word
;
+// And here
+ word
;
+
+
+
+//// [tsxReactEmitWhitespace2.js]
+// Emit ' word' in the last string
+React.createElement("div", null, "word ", React.createElement("code", null, "code"), " word");
+// Same here
+React.createElement("div", null, React.createElement("code", null, "code"), " word");
+// And here
+React.createElement("div", null, React.createElement("code", null), " word");
diff --git a/tests/baselines/reference/tsxReactEmitWhitespace2.symbols b/tests/baselines/reference/tsxReactEmitWhitespace2.symbols
new file mode 100644
index 00000000000..44ff4cba292
--- /dev/null
+++ b/tests/baselines/reference/tsxReactEmitWhitespace2.symbols
@@ -0,0 +1,38 @@
+=== tests/cases/conformance/jsx/tsxReactEmitWhitespace2.tsx ===
+declare module JSX {
+>JSX : Symbol(JSX, Decl(tsxReactEmitWhitespace2.tsx, 0, 0))
+
+ interface Element { }
+>Element : Symbol(Element, Decl(tsxReactEmitWhitespace2.tsx, 0, 20))
+
+ interface IntrinsicElements {
+>IntrinsicElements : Symbol(IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22))
+
+ [s: string]: any;
+>s : Symbol(s, Decl(tsxReactEmitWhitespace2.tsx, 3, 3))
+ }
+}
+declare var React: any;
+>React : Symbol(React, Decl(tsxReactEmitWhitespace2.tsx, 6, 11))
+
+// Emit ' word' in the last string
+word code word
;
+>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22))
+>code : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22))
+>code : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22))
+>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22))
+
+// Same here
+code word
;
+>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22))
+>code : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22))
+>code : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22))
+>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22))
+
+// And here
+ word
;
+>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22))
+>code : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22))
+>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace2.tsx, 1, 22))
+
+
diff --git a/tests/baselines/reference/tsxReactEmitWhitespace2.types b/tests/baselines/reference/tsxReactEmitWhitespace2.types
new file mode 100644
index 00000000000..7287e59b9b1
--- /dev/null
+++ b/tests/baselines/reference/tsxReactEmitWhitespace2.types
@@ -0,0 +1,44 @@
+=== tests/cases/conformance/jsx/tsxReactEmitWhitespace2.tsx ===
+declare module JSX {
+>JSX : any
+
+ interface Element { }
+>Element : Element
+
+ interface IntrinsicElements {
+>IntrinsicElements : IntrinsicElements
+
+ [s: string]: any;
+>s : string
+ }
+}
+declare var React: any;
+>React : any
+
+// Emit ' word' in the last string
+word code word
;
+>word code word
: JSX.Element
+>div : any
+>code : JSX.Element
+>code : any
+>code : any
+>div : any
+
+// Same here
+code word
;
+>code word
: JSX.Element
+>div : any
+>code : JSX.Element
+>code : any
+>code : any
+>div : any
+
+// And here
+ word
;
+> word
: JSX.Element
+>div : any
+> : JSX.Element
+>code : any
+>div : any
+
+
diff --git a/tests/cases/conformance/jsx/tsxReactEmitWhitespace2.tsx b/tests/cases/conformance/jsx/tsxReactEmitWhitespace2.tsx
new file mode 100644
index 00000000000..964064979ec
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxReactEmitWhitespace2.tsx
@@ -0,0 +1,17 @@
+//@filename: file.tsx
+//@jsx: react
+declare module JSX {
+ interface Element { }
+ interface IntrinsicElements {
+ [s: string]: any;
+ }
+}
+declare var React: any;
+
+// Emit ' word' in the last string
+word code word
;
+// Same here
+code word
;
+// And here
+ word
;
+