diff --git a/react-redux/react-redux-tests.tsx b/react-redux/react-redux-tests.tsx
index 9bd662295a..abbacabef2 100644
--- a/react-redux/react-redux-tests.tsx
+++ b/react-redux/react-redux-tests.tsx
@@ -4,7 +4,7 @@
///
///
-import { Component } from 'react';
+import { Component, ReactElement } from 'react';
import * as React from 'react';
import * as Router from 'react-router';
import { Route, RouterState } from 'react-router';
@@ -23,13 +23,13 @@ interface CounterState {
declare var increment: Function;
class Counter extends Component {
- render() {
- return (
-
- );
- }
+ render() {
+ return (
+
+ );
+ }
}
function mapStateToProps(state: CounterState) {
@@ -242,3 +242,37 @@ connect(mapStateToProps2, actionCreators, mergeProps)(TodoApp);
+
+
+interface TestProp {
+ property1: number;
+ someOtherProperty?: string;
+}
+interface TestState {
+ isLoaded: boolean;
+ state1: number;
+}
+class TestComponent extends Component { }
+const WrappedTestComponent = connect()(TestComponent);
+
+// return value of the connect()(TestComponent) is of the type TestComponent
+let ATestComponent: typeof TestComponent = null;
+ATestComponent = TestComponent;
+ATestComponent = WrappedTestComponent;
+
+let anElement: ReactElement;
+;
+;
+;
+
+class NonComponent {}
+// this doesn't compile
+//connect()(NonComponent);
+
+// connect()(SomeClass) has the same constructor as SomeClass itself
+class SomeClass extends Component {
+ constructor(public foo: string) { super() }
+ public bar: number;
+}
+let bar: number = new (connect()(SomeClass))("foo").bar;
+
diff --git a/react-redux/react-redux.d.ts b/react-redux/react-redux.d.ts
index f1ef5458e1..767b6b1097 100644
--- a/react-redux/react-redux.d.ts
+++ b/react-redux/react-redux.d.ts
@@ -10,8 +10,9 @@ declare module "react-redux" {
import { Component } from 'react';
import { Store, Dispatch, ActionCreator } from 'redux';
+ export class ElementClass extends Component { }
export interface ClassDecorator {
- (target: TFunction): TFunction|void;
+ (component: T): T
}
/**