# typed-react **Repository Path**: mirrors_Asana/typed-react ## Basic Information - **Project Name**: typed-react - **Description**: A binding layer between React and TypeScript - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-09-24 - **Last Updated**: 2026-01-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Typed React [![NPM Version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coverage][coveralls-image]][coveralls-url] A binding layer between React and TypeScript for the `React.createClass` syntax. With React 0.13, you can use ES6 classes to inherit from React components. This works well with TypeScript and you can just use the [type definitions][type-definitions] in DefinitelyTyped. The inheritance path has some different functionality so you may still want to use the `React.createClass` pattern. TypedReact can help you implement that pattern by providing a dummy parent class and a set of functions to appropriately extract the prototype for `React.createClass` ## Installation ```sh npm install typed-react --save ``` ## Example ```ts /// /// import React = require("react"); import TypedReact = require("typed-react"); export interface TimerProps { tickInterval: number; } interface TimerState { ticksElapsed: number; } class Timer extends TypedReact.Component { private interval: number; getInitialState() { return { ticksElapsed: 0 }; } tick() { this.setState({ ticksElapsed: this.state.ticksElapsed + 1 }); } componentDidMount() { this.interval = setInterval(this.tick, this.props.tickInterval); } componentWillUnmount() { clearInterval(this.interval); } render() { return React.DOM.div(null, "Ticks Elapsed: ", this.state.ticksElapsed); } } export var timer = TypedReact.createClass(Timer); ``` In this case we export the Props and the Factory but we could make the props and state inline interfaces and just export the factory function. ## Mixins TypedReact supports using existing React Mixins as well as defining new mixins with idiomatic TypeScript. The example is based on [http://www.typescriptlang.org/Handbook#mixins](http://www.typescriptlang.org/Handbook#mixins). You need to use `createMixin` on your own mixins and should export that from your mixin modules. ```ts /// /// import React = require("react/addons"); import TypedReact = require("typed-react"); export interface GreeterProps { name: string; } class GreetingMixin extends TypedReact.Mixin { greet(greeting: string): React.ReactHTMLElement { return React.DOM.h1(null, greeting, this.props.name); } } class Greeter extends TypedReact.Component implements GreetingMixin { greet: (greeting: string) => React.ReactHTMLElement; render() { return this.greet(this.greeting); } } export var greeter = TypedReact.createClass(Greeter, [ TypedReact.createMixin(GreetingMixin), React.addons.PureRenderMixin ]); ``` ## Changelog - **3.3** Updating the React type definitions and moving the location of the type definition - **3.2** Update with new `react.d.ts` typings - **3.1** `extractPrototype` is now `createMixin` - **3.0** Idiomatic Mixin Support - **2.2** Making React a peer dependency. This means you do not need to pass `React.createClass` into `createClass`. - **2.1** Switching to createClass - **2.0** React 0.12.RC - **1.4** Removed incorrect mixin support - **1.3** Mixins ## Development Setup ```sh git clone git@github.com:Asana/typed-react.git cd typed-react npm install npm run typings npm test ``` [npm-url]: https://www.npmjs.org/package/typed-react [npm-image]: http://img.shields.io/npm/v/typed-react.svg?style=flat-square [travis-url]: http://travis-ci.org/Asana/typed-react [travis-image]: http://img.shields.io/travis/Asana/typed-react/master.svg?style=flat-square [coveralls-url]: https://coveralls.io/r/Asana/typed-react [coveralls-image]: https://img.shields.io/coveralls/Asana/typed-react/master.svg?style=flat-square [type-definitions]: https://github.com/borisyankov/DefinitelyTyped/tree/master/react