Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/lyft/react-javascript-to-typescript-transform

Convert React JavaScript code to TypeScript with proper typing
https://github.com/lyft/react-javascript-to-typescript-transform

lyft

Last synced: 11 days ago
JSON representation

Convert React JavaScript code to TypeScript with proper typing

Awesome Lists containing this project

README

        

# React JavaScript to TypeScript Transform

[![Build Status](https://travis-ci.org/lyft/react-javascript-to-typescript-transform.svg?branch=master)](https://travis-ci.org/lyft/react-javascript-to-typescript-transform)

Transforms React code written in JavaScript to TypeScript.

[**🖥 Download the VSCode Extension**](https://marketplace.visualstudio.com/items?itemName=mohsen1.react-javascript-to-typescript-transform-vscode)

## Features:

* Proxies `PropTypes` to `React.Component` generic type and removes PropTypes
* Provides state typing for `React.Component` based on initial state and `setState()` calls in the component
* Hoist large interfaces for props and state out of `React.Component

` into declared types
* Convert functional components with `PropTypes` property to TypeScript and uses propTypes to generate function type declaration

## Example

**input**

```jsx
class MyComponent extends React.Component {
static propTypes = {
prop1: React.PropTypes.string.isRequired,
prop2: React.PropTypes.number,
};
constructor() {
super();
this.state = { foo: 1, bar: 'str' };
}
render() {
return (


{this.state.foo}, {this.state.bar}, {this.state.baz}

);
}
onClick() {
this.setState({ baz: 3 });
}
}
```

**output**

```tsx
type MyComponentProps = {
prop1: string;
prop2?: number;
};

type MyComponentState = {
foo: number;
bar: string;
baz: number;
};

class MyComponent extends React.Component {
constructor() {
super();
this.state = { foo: 1, bar: 'str' };
}
render() {
return (


{this.state.foo}, {this.state.bar}, {this.state.baz}

);
}
onClick() {
this.setState({ baz: 3 });
}
}
```

## Usage

### CLI

```
npm install -g react-js-to-ts
```

```
react-js-to-ts my-react-js-file.js
```

### VSCode plugin

details
[Download from VSCode Marketplace](https://marketplace.visualstudio.com/items?itemName=mohsen1.react-javascript-to-typescript-transform-vscode#overview)

## Development

### Tests

Tests are organized in `test` folder. For each transform there is a folder that contains folders for each test case. Each test case has `input.tsx` and `output.tsx`.

```
npm test
```

#### Watch mode

Pass `-w` to `npm test`

```
npm test -- -w
```

#### Only a single test case

Pass `-t` with transform name and case name space separated to `npm test`

```
npm test -- -t "react-js-make-props-and-state-transform propless-stateless"
```