Pular para o conteúdo

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

  1. Cole código anotado com Flow (com ou sem o cabeçalho // @flow) no painel Flow.
  2. 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.
  3. 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 store

Detalhes 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.

Especificações e referências