Converter Flow em JavaScript — Numio
Remove as anotações de tipo do Flow para produzir JavaScript puro usando o plugin flow-strip-types do Babel. Imports só de tipos e aliases de tipo são removidos, e depois a página formata o resultado com Prettier.
Você está removendo o Flow de um projeto e quer primeiro o JavaScript puro, antes de decidir se migra para TypeScript.
Flow
JavaScript
Quando usar
- Você está removendo o Flow de um projeto e quer primeiro o JavaScript puro, antes de decidir se migra para TypeScript.
- Você precisa colar um trecho tipado com Flow em um lugar que só aceita JavaScript padrão, como o console do navegador ou um codepen.
Como usar
- Cole código anotado com Flow (com ou sem o cabeçalho // @flow) no painel Flow.
- O código é enviado para /api/flow-to-javascript, onde o recast o analisa com o parser do Flow e o Babel remove os tipos.
- Copie o JavaScript do painel de saída.
Flow
// @flow
import type { Store } from './store';
import { createStore } from './store';
type State = { count: number };
export function first<T>(items: Array<T>): ?T {
return items.length ? items[0] : null;
}
const store: Store<State> = createStore(({ count: 0 }: State));
export default store;JavaScript
import { createStore } from "./store"
export function first(items) {
return items.length ? items[0] : null
}
const store = createStore({
count: 0,
})
export default storeDetalhes e limitações
A página envia sua entrada para uma rota do servidor (/api/flow-to-javascript) para conversão; ela não é processada apenas no navegador. As rotas de API do Next.js aceitam por padrão corpos de requisição de até 1 MB.
Só os tipos são removidos. Sintaxe moderna como JSX, ?? ou campos de classe não é transpilada.
O resultado é reformatado com Prettier (aspas duplas, sem ponto e vírgula), então o estilo original não é mantido, e um type cast como ({ count: 0 }: State) perde os parênteses extras.
Um comentário // @flow anexado a uma declaração de tipo removida é removido junto com ela.
FAQ
Ele mantém o JSX?
Sim. O JSX é analisado e passa sem alteração, então você ainda precisa de um transform de JSX para rodar o resultado.
O que acontece com as instruções import type?
Elas são removidas por completo. Imports normais continuam como estão.
A saída precisa de Flow ou Babel para rodar?
Não precisa de Flow. Se a entrada usa JSX ou sintaxe nova, seu runtime ou bundler ainda precisa suportá-los.