Vai al contenuto

Da Flow a JavaScript standard — Numio

Strisce Annotazioni di tipo Flow per produrre semplici JavaScript utilizzando il plugin flow-strip-types di Babel. Le importazioni di solo tipo e gli alias di tipo vengono rimossi e la pagina formatta quindi il risultato con Prettier.

Stai rimuovendo Flow da un progetto e desideri prima il semplice JavaScript, prima di decidere se passare a TypeScript.

Flow

JavaScript

Quando usarlo

  • Stai rimuovendo Flow da un progetto e desideri prima il semplice JavaScript, prima di decidere se passare a TypeScript.
  • Devi incollare uno snippet digitato Flow in una posizione che accetta solo JavaScript standard, come una console del browser o una codepen.

Come si usa

  1. Incolla il codice con annotazioni Flow (con o senza l'intestazione // @flow) nel pannello Flow.
  2. Il codice viene elaborato in un Web Worker locale: recast lo analizza con il parser Flow e Babel rimuove i tipi.
  3. Copia JavaScript dal pannello di output.

Flusso

// @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

Dettagli e limiti

La conversione avviene localmente in un Web Worker del browser; l’input non viene caricato su un server. Al primo utilizzo il browser scarica il modulo di conversione necessario.

Vengono rimossi solo i tipi. Sintassi moderna come JSX, ?? o i campi della classe non vengono traspilati.

Il risultato viene riformattato con Prettier (virgolette doppie, senza punto e virgola), quindi lo stile originale non viene mantenuto e un cast di tipo come ({ count: 0 }: State) perde le sue parentesi extra.

Un // commento @flow allegato a una dichiarazione di tipo rimossa viene rimosso con essa.

FAQ

Mantiene JSX?

Sì. JSX viene analizzato e trasmesso senza modifiche, quindi è ancora necessaria una trasformazione JSX per eseguire il risultato.

Cosa succede alle istruzioni di tipo importato?

Vengono rimossi completamente. Le importazioni regolari rimangono invariate.

L'output necessita di Flow o Babel per essere eseguito?

Non è necessario alcun flusso. Se l'input utilizza JSX o una nuova sintassi, il runtime o il bundler devono comunque supportarlo.

Specifiche e riferimenti