diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index da45c08ab44..5fee3dd3a54 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -7261,7 +7261,7 @@ namespace ts {
if (links.jsxFlags & JsxFlags.ClassElement) {
let elemInstanceType = getJsxElementInstanceType(node);
- if (isTypeAny(elemInstanceType)) {
+ if (!elemInstanceType || isTypeAny(elemInstanceType)) {
return links.resolvedJsxType = anyType;
}
diff --git a/tests/baselines/reference/jsxViaImport.errors.txt b/tests/baselines/reference/jsxViaImport.errors.txt
new file mode 100644
index 00000000000..8fa22809a44
--- /dev/null
+++ b/tests/baselines/reference/jsxViaImport.errors.txt
@@ -0,0 +1,27 @@
+tests/cases/compiler/consumer.tsx(5,17): error TS2604: JSX element type 'BaseComponent' does not have any construct or call signatures.
+
+
+==== tests/cases/compiler/consumer.tsx (1 errors) ====
+ ///
+ import BaseComponent = require('BaseComponent');
+ class TestComponent extends React.Component {
+ render() {
+ return ;
+ ~~~~~~~~~~~~~
+!!! error TS2604: JSX element type 'BaseComponent' does not have any construct or call signatures.
+ }
+ }
+
+==== tests/cases/compiler/component.d.ts (0 errors) ====
+
+ declare module JSX {
+ interface ElementAttributesProperty { props; }
+ }
+ declare module React {
+ class Component { }
+ }
+ declare module "BaseComponent" {
+ var base: React.Component;
+ export = base;
+ }
+
\ No newline at end of file
diff --git a/tests/baselines/reference/jsxViaImport.js b/tests/baselines/reference/jsxViaImport.js
new file mode 100644
index 00000000000..6bf61af67f5
--- /dev/null
+++ b/tests/baselines/reference/jsxViaImport.js
@@ -0,0 +1,43 @@
+//// [tests/cases/compiler/jsxViaImport.tsx] ////
+
+//// [component.d.ts]
+
+declare module JSX {
+ interface ElementAttributesProperty { props; }
+}
+declare module React {
+ class Component { }
+}
+declare module "BaseComponent" {
+ var base: React.Component;
+ export = base;
+}
+
+//// [consumer.tsx]
+///
+import BaseComponent = require('BaseComponent');
+class TestComponent extends React.Component {
+ render() {
+ return ;
+ }
+}
+
+
+//// [consumer.jsx]
+var __extends = (this && this.__extends) || function (d, b) {
+ for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+///
+var BaseComponent = require('BaseComponent');
+var TestComponent = (function (_super) {
+ __extends(TestComponent, _super);
+ function TestComponent() {
+ _super.apply(this, arguments);
+ }
+ TestComponent.prototype.render = function () {
+ return ;
+ };
+ return TestComponent;
+})(React.Component);
diff --git a/tests/cases/compiler/jsxViaImport.tsx b/tests/cases/compiler/jsxViaImport.tsx
new file mode 100644
index 00000000000..5b3b7e11d83
--- /dev/null
+++ b/tests/cases/compiler/jsxViaImport.tsx
@@ -0,0 +1,23 @@
+//@jsx: preserve
+//@module: commonjs
+
+//@filename: component.d.ts
+declare module JSX {
+ interface ElementAttributesProperty { props; }
+}
+declare module React {
+ class Component { }
+}
+declare module "BaseComponent" {
+ var base: React.Component;
+ export = base;
+}
+
+//@filename: consumer.tsx
+///
+import BaseComponent = require('BaseComponent');
+class TestComponent extends React.Component {
+ render() {
+ return ;
+ }
+}