diff --git a/tests/cases/fourslash/tsxCompletionUnionElementType.ts b/tests/cases/fourslash/tsxCompletionUnionElementType.ts
new file mode 100644
index 00000000000..4a1044e20ac
--- /dev/null
+++ b/tests/cases/fourslash/tsxCompletionUnionElementType.ts
@@ -0,0 +1,23 @@
+///
+
+//@Filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+
+//// declare module JSX {
+//// interface Element { }
+//// interface IntrinsicElements {
+//// }
+//// interface ElementAttributesProperty { props; }
+//// }
+//// function SFC1(prop: { x: number }) {
+//// return
hello
;
+//// };
+//// function SFC2(prop: { x: boolean }) {
+//// return World
;
+//// }
+//// var SFCComp = SFC1 || SFC2;
+////
+
+goTo.marker();
+verify.completionListContains("x", "(property) x: number | boolean");
\ No newline at end of file
diff --git a/tests/cases/fourslash/tsxFindAllReferencesUnionElementType1.ts b/tests/cases/fourslash/tsxFindAllReferencesUnionElementType1.ts
new file mode 100644
index 00000000000..e7c2a1a567c
--- /dev/null
+++ b/tests/cases/fourslash/tsxFindAllReferencesUnionElementType1.ts
@@ -0,0 +1,24 @@
+///
+
+//@Filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+
+//// declare module JSX {
+//// interface Element { }
+//// interface IntrinsicElements {
+//// }
+//// interface ElementAttributesProperty { props; }
+//// }
+//// function SFC1(prop: { x: number }) {
+//// return hello
;
+//// };
+
+//// function SFC2(prop: { x: boolean }) {
+//// return World
;
+//// }
+
+//// var [|SFCComp|] = SFC1 || SFC2;
+//// <[|SFCComp|] x={ "hi" } />
+
+verify.rangesReferenceEachOther();
\ No newline at end of file
diff --git a/tests/cases/fourslash/tsxFindAllReferencesUnionElementType2.ts b/tests/cases/fourslash/tsxFindAllReferencesUnionElementType2.ts
new file mode 100644
index 00000000000..3089279b2e7
--- /dev/null
+++ b/tests/cases/fourslash/tsxFindAllReferencesUnionElementType2.ts
@@ -0,0 +1,23 @@
+///
+
+//@Filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+
+//// class RC1 extends React.Component<{}, {}> {
+//// render() {
+//// return null;
+//// }
+//// }
+
+//// class RC2 extends React.Component<{}, {}> {
+//// render() {
+//// return null;
+//// }
+//// private method() { }
+//// }
+
+//// var [|RCComp|] = RC1 || RC2;
+//// <[|RCComp|] />
+
+verify.rangesReferenceEachOther();
\ No newline at end of file
diff --git a/tests/cases/fourslash/tsxGoToDefinitionUnionElementType1.ts b/tests/cases/fourslash/tsxGoToDefinitionUnionElementType1.ts
new file mode 100644
index 00000000000..db78f46f3ad
--- /dev/null
+++ b/tests/cases/fourslash/tsxGoToDefinitionUnionElementType1.ts
@@ -0,0 +1,26 @@
+///
+
+//@Filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+
+//// declare module JSX {
+//// interface Element { }
+//// interface IntrinsicElements {
+//// }
+//// interface ElementAttributesProperty { props; }
+//// }
+//// function /*pt1*/SFC1(prop: { x: number }) {
+//// return hello
;
+//// };
+
+//// function SFC2(prop: { x: boolean }) {
+//// return World
;
+//// }
+
+//// var SFCComp = SFC1 || SFC2;
+////
+
+verify.goToDefinition({
+ "one": "pt1"
+})
\ No newline at end of file
diff --git a/tests/cases/fourslash/tsxGoToDefinitionUnionElementType2.ts b/tests/cases/fourslash/tsxGoToDefinitionUnionElementType2.ts
new file mode 100644
index 00000000000..75ca81998a0
--- /dev/null
+++ b/tests/cases/fourslash/tsxGoToDefinitionUnionElementType2.ts
@@ -0,0 +1,26 @@
+///
+
+//@Filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+
+//// class RC1 extends React.Component<{}, {}> {
+//// render() {
+//// return null;
+//// }
+//// }
+
+//// class RC2 extends React.Component<{}, {}> {
+//// render() {
+//// return null;
+//// }
+//// private method() { }
+//// }
+
+//// var /*pt1*/RCComp = RC1 || RC2;
+
+////
+
+verify.goToDefinition({
+ "one": "pt1"
+})
\ No newline at end of file