Convertir Flow a JavaScript — Numio
Elimina las anotaciones de tipo de Flow para producir JavaScript plano con el plugin flow-strip-types de Babel. Se eliminan los imports solo de tipos y los alias de tipo, y después la página formatea el resultado con Prettier.
Estás quitando Flow de un proyecto y quieres primero el JavaScript plano, antes de decidir si pasar a TypeScript.
Flow
JavaScript
Cuándo usarla
- Estás quitando Flow de un proyecto y quieres primero el JavaScript plano, antes de decidir si pasar a TypeScript.
- Necesitas pegar un fragmento tipado con Flow en un sitio que solo acepta JavaScript estándar, como la consola del navegador o un codepen.
Cómo usarla
- Pega código anotado con Flow (con o sin la cabecera // @flow) en el panel Flow.
- El código se envía a /api/flow-to-javascript, donde recast lo analiza con el parser de Flow y Babel elimina los tipos.
- Copia el JavaScript del panel de salida.
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 storeDetalles y limitaciones
La página envía tu entrada a una ruta del servidor (/api/flow-to-javascript) para convertirla; no se procesa solo en el navegador. Las rutas API de Next.js aceptan por defecto cuerpos de solicitud de hasta 1 MB.
Solo se eliminan los tipos. La sintaxis moderna como JSX, ?? o los campos de clase no se transpila.
El resultado se reformatea con Prettier (comillas dobles, sin punto y coma), así que no se conserva el estilo original, y un type cast como ({ count: 0 }: State) pierde sus paréntesis sobrantes.
Un comentario // @flow unido a una declaración de tipo eliminada se elimina con ella.
FAQ
¿Conserva el JSX?
Sí. El JSX se analiza y se deja pasar sin cambios, así que sigues necesitando una transformación de JSX para ejecutar el resultado.
¿Qué pasa con las sentencias import type?
Se eliminan por completo. Los imports normales se quedan como están.
¿La salida necesita Flow o Babel para ejecutarse?
No necesita Flow. Si la entrada usa JSX o sintaxis nueva, tu runtime o bundler debe seguir admitiéndolos.