diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences1.js b/tests/baselines/reference/correctlyMarkAliasAsReferences1.js
new file mode 100644
index 00000000000..7816881f4a2
--- /dev/null
+++ b/tests/baselines/reference/correctlyMarkAliasAsReferences1.js
@@ -0,0 +1,23 @@
+//// [tests/cases/conformance/jsx/correctlyMarkAliasAsReferences1.tsx] ////
+
+//// [declaration.d.ts]
+declare module "classnames";
+
+//// [0.tsx]
+///
+import * as cx from 'classnames';
+import * as React from "react";
+
+let buttonProps; // any
+let k = ;
+
+
+//// [0.js]
+///
+import * as cx from 'classnames';
+import * as React from "react";
+let buttonProps; // any
+let k = React.createElement("button", Object.assign({}, buttonProps),
+ React.createElement("span", { className: cx('class1', { class2: true }) }));
diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences1.symbols b/tests/baselines/reference/correctlyMarkAliasAsReferences1.symbols
new file mode 100644
index 00000000000..3267a29050e
--- /dev/null
+++ b/tests/baselines/reference/correctlyMarkAliasAsReferences1.symbols
@@ -0,0 +1,29 @@
+=== tests/cases/conformance/jsx/0.tsx ===
+///
+import * as cx from 'classnames';
+>cx : Symbol(cx, Decl(0.tsx, 1, 6))
+
+import * as React from "react";
+>React : Symbol(React, Decl(0.tsx, 2, 6))
+
+let buttonProps; // any
+>buttonProps : Symbol(buttonProps, Decl(0.tsx, 4, 3))
+
+let k = ;
+>button : Symbol(JSX.IntrinsicElements.button, Decl(react.d.ts, 2385, 43))
+
+=== tests/cases/conformance/jsx/declaration.d.ts ===
+declare module "classnames";
+No type information for this code.
+No type information for this code.
\ No newline at end of file
diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences1.types b/tests/baselines/reference/correctlyMarkAliasAsReferences1.types
new file mode 100644
index 00000000000..dbcad2fdc3c
--- /dev/null
+++ b/tests/baselines/reference/correctlyMarkAliasAsReferences1.types
@@ -0,0 +1,35 @@
+=== tests/cases/conformance/jsx/0.tsx ===
+///
+import * as cx from 'classnames';
+>cx : any
+
+import * as React from "react";
+>React : typeof React
+
+let buttonProps; // any
+>buttonProps : any
+
+let k = ;
+>button : any
+
+=== tests/cases/conformance/jsx/declaration.d.ts ===
+declare module "classnames";
+No type information for this code.
+No type information for this code.
\ No newline at end of file
diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences2.js b/tests/baselines/reference/correctlyMarkAliasAsReferences2.js
new file mode 100644
index 00000000000..7af59b017a8
--- /dev/null
+++ b/tests/baselines/reference/correctlyMarkAliasAsReferences2.js
@@ -0,0 +1,23 @@
+//// [tests/cases/conformance/jsx/correctlyMarkAliasAsReferences2.tsx] ////
+
+//// [declaration.d.ts]
+declare module "classnames";
+
+//// [0.tsx]
+///
+import * as cx from 'classnames';
+import * as React from "react";
+
+let buttonProps : {[attributeName: string]: ''}
+let k =
+
+ ;
+
+
+//// [0.js]
+///
+import * as cx from 'classnames';
+import * as React from "react";
+let buttonProps;
+let k = React.createElement("button", Object.assign({}, buttonProps),
+ React.createElement("span", { className: cx('class1', { class2: true }) }));
diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences2.symbols b/tests/baselines/reference/correctlyMarkAliasAsReferences2.symbols
new file mode 100644
index 00000000000..76d9b8cdfe0
--- /dev/null
+++ b/tests/baselines/reference/correctlyMarkAliasAsReferences2.symbols
@@ -0,0 +1,30 @@
+=== tests/cases/conformance/jsx/0.tsx ===
+///
+import * as cx from 'classnames';
+>cx : Symbol(cx, Decl(0.tsx, 1, 6))
+
+import * as React from "react";
+>React : Symbol(React, Decl(0.tsx, 2, 6))
+
+let buttonProps : {[attributeName: string]: ''}
+>buttonProps : Symbol(buttonProps, Decl(0.tsx, 4, 3))
+>attributeName : Symbol(attributeName, Decl(0.tsx, 4, 20))
+
+let k =
+>k : Symbol(k, Decl(0.tsx, 5, 3))
+>button : Symbol(JSX.IntrinsicElements.button, Decl(react.d.ts, 2385, 43))
+>buttonProps : Symbol(buttonProps, Decl(0.tsx, 4, 3))
+
+
+>span : Symbol(JSX.IntrinsicElements.span, Decl(react.d.ts, 2460, 51))
+>className : Symbol(className, Decl(0.tsx, 6, 17))
+>cx : Symbol(cx, Decl(0.tsx, 1, 6))
+>class2 : Symbol(class2, Decl(0.tsx, 6, 43))
+
+ ;
+>button : Symbol(JSX.IntrinsicElements.button, Decl(react.d.ts, 2385, 43))
+
+=== tests/cases/conformance/jsx/declaration.d.ts ===
+declare module "classnames";
+No type information for this code.
+No type information for this code.
\ No newline at end of file
diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences2.types b/tests/baselines/reference/correctlyMarkAliasAsReferences2.types
new file mode 100644
index 00000000000..cfaba960da2
--- /dev/null
+++ b/tests/baselines/reference/correctlyMarkAliasAsReferences2.types
@@ -0,0 +1,36 @@
+=== tests/cases/conformance/jsx/0.tsx ===
+///
+import * as cx from 'classnames';
+>cx : any
+
+import * as React from "react";
+>React : typeof React
+
+let buttonProps : {[attributeName: string]: ''}
+>buttonProps : { [attributeName: string]: ""; }
+>attributeName : string
+
+let k =
+>k : JSX.Element
+> : JSX.Element
+>button : any
+>buttonProps : { [attributeName: string]: ""; }
+
+
+> : JSX.Element
+>span : any
+>className : any
+>cx('class1', { class2: true }) : any
+>cx : any
+>'class1' : "class1"
+>{ class2: true } : { class2: boolean; }
+>class2 : boolean
+>true : true
+
+ ;
+>button : any
+
+=== tests/cases/conformance/jsx/declaration.d.ts ===
+declare module "classnames";
+No type information for this code.
+No type information for this code.
\ No newline at end of file
diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences3.js b/tests/baselines/reference/correctlyMarkAliasAsReferences3.js
new file mode 100644
index 00000000000..166e29d56db
--- /dev/null
+++ b/tests/baselines/reference/correctlyMarkAliasAsReferences3.js
@@ -0,0 +1,23 @@
+//// [tests/cases/conformance/jsx/correctlyMarkAliasAsReferences3.tsx] ////
+
+//// [declaration.d.ts]
+declare module "classnames";
+
+//// [0.tsx]
+///
+import * as cx from 'classnames';
+import * as React from "react";
+
+let buttonProps;
+let k =
+
+ ;
+
+
+//// [0.js]
+///
+import * as cx from 'classnames';
+import * as React from "react";
+let buttonProps;
+let k = React.createElement("button", Object.assign({}, buttonProps),
+ React.createElement("span", { className: cx('class1', { class2: true }) }));
diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences3.symbols b/tests/baselines/reference/correctlyMarkAliasAsReferences3.symbols
new file mode 100644
index 00000000000..088f553baa4
--- /dev/null
+++ b/tests/baselines/reference/correctlyMarkAliasAsReferences3.symbols
@@ -0,0 +1,29 @@
+=== tests/cases/conformance/jsx/0.tsx ===
+///
+import * as cx from 'classnames';
+>cx : Symbol(cx, Decl(0.tsx, 1, 6))
+
+import * as React from "react";
+>React : Symbol(React, Decl(0.tsx, 2, 6))
+
+let buttonProps;
+>buttonProps : Symbol(buttonProps, Decl(0.tsx, 4, 3))
+
+let k =
+>k : Symbol(k, Decl(0.tsx, 5, 3))
+>button : Symbol(JSX.IntrinsicElements.button, Decl(react.d.ts, 2385, 43))
+>buttonProps : Symbol(buttonProps, Decl(0.tsx, 4, 3))
+
+
+>span : Symbol(JSX.IntrinsicElements.span, Decl(react.d.ts, 2460, 51))
+>className : Symbol(className, Decl(0.tsx, 6, 17))
+>cx : Symbol(cx, Decl(0.tsx, 1, 6))
+>class2 : Symbol(class2, Decl(0.tsx, 6, 43))
+
+ ;
+>button : Symbol(JSX.IntrinsicElements.button, Decl(react.d.ts, 2385, 43))
+
+=== tests/cases/conformance/jsx/declaration.d.ts ===
+declare module "classnames";
+No type information for this code.
+No type information for this code.
\ No newline at end of file
diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences3.types b/tests/baselines/reference/correctlyMarkAliasAsReferences3.types
new file mode 100644
index 00000000000..cca59ae2f5e
--- /dev/null
+++ b/tests/baselines/reference/correctlyMarkAliasAsReferences3.types
@@ -0,0 +1,35 @@
+=== tests/cases/conformance/jsx/0.tsx ===
+///
+import * as cx from 'classnames';
+>cx : any
+
+import * as React from "react";
+>React : typeof React
+
+let buttonProps;
+>buttonProps : any
+
+let k =
+>k : JSX.Element
+> : JSX.Element
+>button : any
+>buttonProps : undefined
+
+
+> : JSX.Element
+>span : any
+>className : any
+>cx('class1', { class2: true }) : any
+>cx : any
+>'class1' : "class1"
+>{ class2: true } : { class2: boolean; }
+>class2 : boolean
+>true : true
+
+ ;
+>button : any
+
+=== tests/cases/conformance/jsx/declaration.d.ts ===
+declare module "classnames";
+No type information for this code.
+No type information for this code.
\ No newline at end of file
diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences4.js b/tests/baselines/reference/correctlyMarkAliasAsReferences4.js
new file mode 100644
index 00000000000..631d06cc5b3
--- /dev/null
+++ b/tests/baselines/reference/correctlyMarkAliasAsReferences4.js
@@ -0,0 +1,19 @@
+//// [tests/cases/conformance/jsx/correctlyMarkAliasAsReferences4.tsx] ////
+
+//// [declaration.d.ts]
+declare module "classnames";
+
+//// [0.tsx]
+///
+import * as cx from 'classnames';
+import * as React from "react";
+
+let buttonProps : {[attributeName: string]: ''}
+let k = ;
+
+//// [0.js]
+///
+import * as cx from 'classnames';
+import * as React from "react";
+let buttonProps;
+let k = React.createElement("button", Object.assign({}, buttonProps, { className: cx('class1', { class2: true }) }));
diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences4.symbols b/tests/baselines/reference/correctlyMarkAliasAsReferences4.symbols
new file mode 100644
index 00000000000..83b245072e9
--- /dev/null
+++ b/tests/baselines/reference/correctlyMarkAliasAsReferences4.symbols
@@ -0,0 +1,24 @@
+=== tests/cases/conformance/jsx/0.tsx ===
+///
+import * as cx from 'classnames';
+>cx : Symbol(cx, Decl(0.tsx, 1, 6))
+
+import * as React from "react";
+>React : Symbol(React, Decl(0.tsx, 2, 6))
+
+let buttonProps : {[attributeName: string]: ''}
+>buttonProps : Symbol(buttonProps, Decl(0.tsx, 4, 3))
+>attributeName : Symbol(attributeName, Decl(0.tsx, 4, 20))
+
+let k = ;
+>k : Symbol(k, Decl(0.tsx, 5, 3))
+>button : Symbol(JSX.IntrinsicElements.button, Decl(react.d.ts, 2385, 43))
+>buttonProps : Symbol(buttonProps, Decl(0.tsx, 4, 3))
+>className : Symbol(className, Decl(0.tsx, 5, 32))
+>cx : Symbol(cx, Decl(0.tsx, 1, 6))
+>class2 : Symbol(class2, Decl(0.tsx, 5, 58))
+
+=== tests/cases/conformance/jsx/declaration.d.ts ===
+declare module "classnames";
+No type information for this code.
+No type information for this code.
\ No newline at end of file
diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences4.types b/tests/baselines/reference/correctlyMarkAliasAsReferences4.types
new file mode 100644
index 00000000000..334444b8e22
--- /dev/null
+++ b/tests/baselines/reference/correctlyMarkAliasAsReferences4.types
@@ -0,0 +1,29 @@
+=== tests/cases/conformance/jsx/0.tsx ===
+///
+import * as cx from 'classnames';
+>cx : any
+
+import * as React from "react";
+>React : typeof React
+
+let buttonProps : {[attributeName: string]: ''}
+>buttonProps : { [attributeName: string]: ""; }
+>attributeName : string
+
+let k = ;
+>k : JSX.Element
+> : JSX.Element
+>button : any
+>buttonProps : { [attributeName: string]: ""; }
+>className : any
+>cx('class1', { class2: true }) : any
+>cx : any
+>'class1' : "class1"
+>{ class2: true } : { class2: boolean; }
+>class2 : boolean
+>true : true
+
+=== tests/cases/conformance/jsx/declaration.d.ts ===
+declare module "classnames";
+No type information for this code.
+No type information for this code.
\ No newline at end of file
diff --git a/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences1.tsx b/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences1.tsx
new file mode 100644
index 00000000000..a074b3b8086
--- /dev/null
+++ b/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences1.tsx
@@ -0,0 +1,17 @@
+// @target: es2017
+// @jsx: react
+// @moduleResolution: node
+// @libFiles: react.d.ts,lib.d.ts
+
+// @filename: declaration.d.ts
+declare module "classnames";
+
+// @filename: 0.tsx
+///
+import * as cx from 'classnames';
+import * as React from "react";
+
+let buttonProps; // any
+let k =
+
+ ;
diff --git a/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences2.tsx b/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences2.tsx
new file mode 100644
index 00000000000..9755c624fc5
--- /dev/null
+++ b/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences2.tsx
@@ -0,0 +1,17 @@
+// @target: es2017
+// @jsx: react
+// @moduleResolution: node
+// @libFiles: react.d.ts,lib.d.ts
+
+// @filename: declaration.d.ts
+declare module "classnames";
+
+// @filename: 0.tsx
+///
+import * as cx from 'classnames';
+import * as React from "react";
+
+let buttonProps : {[attributeName: string]: ''}
+let k =
+
+ ;
diff --git a/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences3.tsx b/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences3.tsx
new file mode 100644
index 00000000000..c3bfb0c8a47
--- /dev/null
+++ b/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences3.tsx
@@ -0,0 +1,18 @@
+// @target: es2017
+// @jsx: react
+// @moduleResolution: node
+// @noImplicitAny: true
+// @libFiles: react.d.ts,lib.d.ts
+
+// @filename: declaration.d.ts
+declare module "classnames";
+
+// @filename: 0.tsx
+///
+import * as cx from 'classnames';
+import * as React from "react";
+
+let buttonProps;
+let k =
+
+ ;
diff --git a/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences4.tsx b/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences4.tsx
new file mode 100644
index 00000000000..edb9f75f87b
--- /dev/null
+++ b/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences4.tsx
@@ -0,0 +1,15 @@
+// @target: es2017
+// @jsx: react
+// @moduleResolution: node
+// @libFiles: react.d.ts,lib.d.ts
+
+// @filename: declaration.d.ts
+declare module "classnames";
+
+// @filename: 0.tsx
+///
+import * as cx from 'classnames';
+import * as React from "react";
+
+let buttonProps : {[attributeName: string]: ''}
+let k = ;
\ No newline at end of file
diff --git a/tests/lib/react.d.ts b/tests/lib/react.d.ts
index 0629cb956fc..1d7b787b999 100644
--- a/tests/lib/react.d.ts
+++ b/tests/lib/react.d.ts
@@ -2359,9 +2359,9 @@ declare namespace JSX {
interface ElementClass extends React.Component {
render(): JSX.Element | null;
}
- interface ElementAttributesProperty { props; }
+ interface ElementAttributesProperty { props: any; }
- interface ElementChildrenAttribute { children; }
+ interface ElementChildrenAttribute { children: any; }
interface IntrinsicAttributes extends React.Attributes { }