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

https://github.com/dawsbot/typewriter

🎹 POC TypeScript -> Flow Converter
https://github.com/dawsbot/typewriter

codegen flow flowtype javascript typescript typescript-library

Last synced: 12 months ago
JSON representation

🎹 POC TypeScript -> Flow Converter

Awesome Lists containing this project

README

          















🎉 Using TypeScript is fun, but [Flow](https://flow.org/) is even better. The typing systems are similar, but the community is quickly supporting Flow for React. Take React Native for example, Flow is supported by default while TypeScript is a nightmare to configure (think `/build` dir, hot reloading, and concurrent typescript compilation separate from babel).

With this increase in open-source effort, many companies are doubling down on Flow (Facebook, Uber, etc.).





Adopt Flow instantly with TypeWriter.



⚡️ Tell **TypeWriter** which files you care about, and it will run a [big list of codemods](#default-codemods) instantly!

⚠️ This is early stage software. There will be bugs. Please help improve it by using this and reporting issues ⚠️

🔧 *There is minor manual work after running TypeWriter. If you see room for improvement, [create an issue](https://github.com/dawsbot/typewriter/issues/new)!*


## Install

```
$ npm install --global tw-cli
```

## Usage

```
$ typewriter src
✔ Converted src/index.ts -> src/index.js
✔ Converted src/App.tsx -> src/App.jsx
```

[See more examples](#more-help)


## Codemods Included

- [x] Rename files from `.ts` -> `.js` & `.tsx` -> `.jsx`
```
a.ts -> a.js
a.tsx -> a.jsx
```


- [x] Add flow keyword quote (`// @flow`)
```
"content" -> "// @flow\ncontent"
```


- [x] Remove `public` and `private` keywords
```
"public render()" -> "render()"
```


- [x] `interface` -> `type`
```
"interface Prop {}" -> "type Prop = {}"
```


- [x] Type imports

* *ensure your types are in `types`, `types/*`, `interface/*`, or `interfaces/*`*

```
// imports from types change
// "import {Prop} from './types'" -> "import type {Prop} from './types'"

// imports from everywhere else are left alone
// "import {NotProp} from './not-types'" -> "import {NotProp} from './not-types'"
```


- [x] Remove `readonly`

Before:
```js
{
readonly color: string
}
```

After:
```js
{
color: string
}
```


- [x] `JSX.Element` -> `React.Node`

In prop typings for TypeScript, a react element is called `JSX.Element` while in Flow this is `React.Node`.

Before:
```js
{
element: JSX.Element;
}
```

After:
```js
{
element: React.Node;
}
```

## More Help

```
$ typewriter --help

TypeScript -> Flow Converter

Usage
$ typewriter [...]

Examples
$ typewriter index.ts
✔ Converted index.ts -> index.js

$ typewriter src
✔ Converted src/index.ts -> src/index.js
✔ Converted src/App.tsx -> src/App.jsx

# ignore node_modules

$ typewriter * '!node_modules/*'
✔ Converted src/index.ts -> src/index.js
✔ Converted src/App.tsx -> src/App.jsx
✔ Converted index.ts -> index.js
```

## Support Development

The work done for this project is free. If you save time with TypeWriter, consider making a [donation](https://liberapay.com/DawsBot).

Are Bitcoin (BTC) donations more your style?

14xAeqDucUpRZkSDQrHCXaKsWmNPeqaB5q

## License

MIT © [Dawson Botsford](https://dawsbot.com)