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
- Host: GitHub
- URL: https://github.com/dawsbot/typewriter
- Owner: dawsbot
- License: mit
- Created: 2017-12-03T00:21:58.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-12-21T01:18:54.000Z (over 8 years ago)
- Last Synced: 2024-10-28T12:52:47.665Z (over 1 year ago)
- Topics: codegen, flow, flowtype, javascript, typescript, typescript-library
- Language: JavaScript
- Homepage:
- Size: 8.11 MB
- Stars: 5
- Watchers: 3
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: readme.md
- License: license
Awesome Lists containing this project
- awesome-github-projects - typewriter - 🎹 POC TypeScript -> Flow Converter ⭐5 `JavaScript` (📦 Legacy & Inactive Projects)
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)