diff --git a/react-mixin/react-mixin-tests.tsx b/react-mixin/react-mixin-tests.tsx new file mode 100644 index 0000000000..32532b1339 --- /dev/null +++ b/react-mixin/react-mixin-tests.tsx @@ -0,0 +1,55 @@ +/// +/// + +import reactMixin = require('react-mixin'); +import * as React from 'react'; + +var someMixin: React.Mixin; +var someOtherMixin: React.Mixin; + +class Foo extends React.Component { + render(): JSX.Element { return
; } +} + +reactMixin(Foo.prototype, someMixin); +reactMixin(Foo.prototype, someOtherMixin); + + +var mixin: React.Mixin = { + getDefaultProps: function(): any { + return {b: 2}; + } +}; + +class Foo2 extends React.Component { + static defaultProps = { + a: 1 + }; + render(): JSX.Element { + console.log(this.props); // {a: 1, b: 2} + return null; + } +} + +reactMixin.onClass(Foo2, mixin); + +@reactMixin.decorate(mixin) +class Foo3 extends React.Component { +} + +function autobind(methodNames: string[]): React.Mixin { + return { + componentWillMount: function(): void { + methodNames.forEach((name) => { + this[name] = this[name].bind(this); + }); + } + }; +} + +@reactMixin.decorate(mixin) +@reactMixin.decorate(autobind(Object.keys(mixin))) +class Foo4 extends React.Component { +} + + diff --git a/react-mixin/react-mixin-tests.tsx.tscparams b/react-mixin/react-mixin-tests.tsx.tscparams new file mode 100644 index 0000000000..c90abf04fc --- /dev/null +++ b/react-mixin/react-mixin-tests.tsx.tscparams @@ -0,0 +1 @@ +--target es5 --noImplicitAny --experimentalDecorators --jsx react diff --git a/react-mixin/react-mixin.d.ts b/react-mixin/react-mixin.d.ts new file mode 100644 index 0000000000..e7d25a6ab4 --- /dev/null +++ b/react-mixin/react-mixin.d.ts @@ -0,0 +1,27 @@ +// Type definitions for react-mixin 2.0.2 +// Project: https://github.com/brigand/react-mixin +// Definitions by: Qubo +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// + +declare module "react-mixin" { + import * as React from 'react'; + + namespace reactMixin { + export interface ClassDecorator { + (target: TFunction): TFunction|void; + } + + interface ReactMixin { + decorate(mixin: React.Mixin): ClassDecorator; + onClass(clazz: any, mixin: React.Mixin): React.ComponentClass; + (clazz: any, mixin: React.Mixin): React.ComponentClass; + } + } + + var reactMixin: reactMixin.ReactMixin; + + export = reactMixin; +} +