diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution1.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution1.tsx
new file mode 100644
index 00000000000..6d5225df2d9
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution1.tsx
@@ -0,0 +1,18 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+class Poisoned extends React.Component<{}, {}> {
+ render() {
+ return
Hello
;
+ }
+}
+
+const obj: Object = {};
+
+// OK
+let p = ;
+let y = ;
\ No newline at end of file
diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution10.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution10.tsx
new file mode 100644
index 00000000000..6410f075ae9
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution10.tsx
@@ -0,0 +1,27 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+interface OptionProp {
+ x?: 2
+}
+
+class Opt extends React.Component {
+ render() {
+ return Hello
;
+ }
+}
+
+const obj: OptionProp = {};
+const obj1: OptionProp = {
+ x: 2
+}
+
+// Error
+let y = ;
+let y1 = ;
+let y2 = ;
+let y3 = ;
diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution11.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution11.tsx
new file mode 100644
index 00000000000..c8008623441
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution11.tsx
@@ -0,0 +1,36 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+const obj = {};
+const obj1: { x: 2 } = {
+ x: 2
+}
+const obj3: {y: true, overwrite: string } = {
+ y: true,
+ overwrite: "hi"
+}
+
+interface Prop {
+ x: 2
+ y: true
+ overwrite: string
+}
+
+class OverWriteAttr extends React.Component {
+ render() {
+ return Hello
;
+ }
+}
+
+let anyobj: any;
+// OK
+let x =
+let x1 =
+let x2 =
+let x3 =
+let x4 =
+let x5 =
\ No newline at end of file
diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution12.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution12.tsx
new file mode 100644
index 00000000000..b5150bd27ff
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution12.tsx
@@ -0,0 +1,34 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+const obj = {};
+const obj1: {x: 2} = {
+ x: 2
+}
+const obj3: {y: false, overwrite: string} = {
+ y: false,
+ overwrite: "hi"
+}
+
+interface Prop {
+ x: 2
+ y: false
+ overwrite: string
+}
+
+class OverWriteAttr extends React.Component {
+ render() {
+ return Hello
;
+ }
+}
+
+let anyobj: any;
+
+// Error
+let x =
+let x1 =
+let x2 =
diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution2.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution2.tsx
new file mode 100644
index 00000000000..1d647226ade
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution2.tsx
@@ -0,0 +1,24 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+interface PoisonedProp {
+ x: string;
+ y: "2";
+}
+
+class Poisoned extends React.Component {
+ render() {
+ return Hello
;
+ }
+}
+
+const obj = {};
+
+// Error
+let p = ;
+let y = ;
+let z = ;
\ No newline at end of file
diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution3.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution3.tsx
new file mode 100644
index 00000000000..8bff2abbd2c
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution3.tsx
@@ -0,0 +1,26 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+interface PoisonedProp {
+ x: string;
+ y: number;
+}
+
+class Poisoned extends React.Component {
+ render() {
+ return Hello
;
+ }
+}
+
+const obj = {
+ x: "hello world",
+ y: 2
+};
+
+// OK
+let p = ;
+let y = ;
\ No newline at end of file
diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution4.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution4.tsx
new file mode 100644
index 00000000000..803853aacdb
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution4.tsx
@@ -0,0 +1,25 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+interface PoisonedProp {
+ x: string;
+ y: 2;
+}
+
+class Poisoned extends React.Component {
+ render() {
+ return Hello
;
+ }
+}
+
+const obj: PoisonedProp = {
+ x: "hello world",
+ y: 2
+};
+
+// OK
+let p = ;
\ No newline at end of file
diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution5.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution5.tsx
new file mode 100644
index 00000000000..76ff79149f3
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution5.tsx
@@ -0,0 +1,25 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+interface PoisonedProp {
+ x: string;
+ y: 2;
+}
+
+class Poisoned extends React.Component {
+ render() {
+ return Hello
;
+ }
+}
+
+let obj = {
+ x: "hello world",
+ y: 2
+};
+
+// Error as "obj" has type { x: string; y: number }
+let p = ;
\ No newline at end of file
diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution6.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution6.tsx
new file mode 100644
index 00000000000..35a190e10cc
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution6.tsx
@@ -0,0 +1,22 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+type TextProps = { editable: false }
+ | { editable: true, onEdit: (newText: string) => void };
+
+class TextComponent extends React.Component {
+ render() {
+ return Some Text..;
+ }
+}
+
+// Error
+let x =
+
+const textProps: TextProps = {
+ editable: false
+};
\ No newline at end of file
diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution7.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution7.tsx
new file mode 100644
index 00000000000..55e3222c022
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution7.tsx
@@ -0,0 +1,29 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+type TextProps = { editable: false }
+ | { editable: true, onEdit: (newText: string) => void };
+
+class TextComponent extends React.Component {
+ render() {
+ return Some Text..;
+ }
+}
+
+// OK
+const textPropsFalse: TextProps = {
+ editable: false
+};
+
+let y1 =
+
+const textPropsTrue: TextProps = {
+ editable: true,
+ onEdit: () => {}
+};
+
+let y2 =
\ No newline at end of file
diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution8.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution8.tsx
new file mode 100644
index 00000000000..937678605d6
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution8.tsx
@@ -0,0 +1,31 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+const obj = {};
+const obj1 = {
+ x: 2
+}
+const obj3 = {
+ y: true,
+ overwrite: "hi"
+}
+
+interface Prop {
+ x: number
+ y: boolean
+ overwrite: string
+}
+
+class OverWriteAttr extends React.Component {
+ render() {
+ return Hello
;
+ }
+}
+
+// OK
+let x =
+let x1 =
\ No newline at end of file
diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution9.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution9.tsx
new file mode 100644
index 00000000000..9f2a63a56b6
--- /dev/null
+++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution9.tsx
@@ -0,0 +1,29 @@
+// @filename: file.tsx
+// @jsx: preserve
+// @noLib: true
+// @libFiles: react.d.ts,lib.d.ts
+
+import React = require('react');
+
+interface OptionProp {
+ x?: 2
+ y?: boolean
+}
+
+class Opt extends React.Component {
+ render() {
+ return Hello
;
+ }
+}
+
+const obj: OptionProp = {};
+const obj1: OptionProp = {
+ x: 2
+}
+
+// OK
+let p = ;
+let y = ;
+let y1 = ;
+let y2 = ;
+let y3 = ;
\ No newline at end of file