🎉 Using TypeScript is fun, but Flow 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 instantly!
🔧 There is minor manual work after running TypeWriter. If you see room for improvement, create an issue!
$ npm install --global tw-cli
$ typewriter src
✔ Converted src/index.ts -> src/index.js
✔ Converted src/App.tsx -> src/App.jsx
- Rename files from
.ts
->.js
&.tsx
->.jsx
a.ts -> a.js
a.tsx -> a.jsx
- Add flow keyword quote (
// @flow
)
"content" -> "// @flow\ncontent"
- Remove
public
andprivate
keywords
"public render()" -> "render()"
-
interface
->type
"interface Prop {}" -> "type Prop = {}"
- Type imports
- ensure your types are in
types
,types/*
,interface/*
, orinterfaces/*
// 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'"
- Remove
readonly
Before:
{
readonly color: string
}
After:
{
color: string
}
-
JSX.Element
->React.Node
In prop typings for TypeScript, a react element is called JSX.Element
while in Flow this is React.Node
.
Before:
{
element: JSX.Element;
}
After:
{
element: React.Node;
}
$ typewriter --help
TypeScript -> Flow Converter
Usage
$ typewriter <path|glob> [...]
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
The work done for this project is free. If you save time with TypeWriter, consider making a donation.
Are Bitcoin (BTC) donations more your style?
14xAeqDucUpRZkSDQrHCXaKsWmNPeqaB5q
MIT © Dawson Botsford