100 % locale — i tuoi dati non lasciano mai il tuo browser

JSON in Flow — alias di tipo per il tuo progetto

Trasforma un campione JSON in alias di tipo Flow. Gli oggetti annidati ricevono un nome: un payload diventa tipi che importi dove ti servono.

Istantaneo Privato Zero cookie

Input JSON

Output Flow

Che cosa fa questo strumento

Un campione JSON diventa alias di tipo Flow, uno per oggetto.

{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
export type Root = {
  id: number,
  name: string,
  address: Address,
};

export type Address = {
  city: string,
};

Anche una lista alla radice prende un nome:

export type Users = UsersItem[];

Quell’alias mancava: il tipo dell’elemento usciva da solo, e il nome radice impostato non andava da nessuna parte. Trovato scrivendo questa pagina e corretto.

L’esattezza non spetta a noi

L’uscita scrive { … }, né {| … |} né un ... finale. Con exact_by_default=true, che le versioni recenti di Flow attivano, quell’oggetto è esatto: una proprietà in più è un errore. Senza il flag è inesatto e le proprietà in più sono ammesse.

Entrambe le posizioni si difendono, e la differenza è una decisione di progetto scritta nel tuo .flowconfig. Mettere il segno in un senso o nell’altro imporrebbe quella decisione in nome di un campione che non ne dice nulla: il tipo generato segue quindi semplicemente la tua configurazione.

mixed, non any

Un array vuoto dà mixed[]; un valore di forma ignota dà mixed. Il bello di mixed è che Flow ti obbliga a restringerlo prima dell’uso, che è ciò che vuoi quando il tipo è davvero ignoto. any sembrerebbe più pulito nell’uscita e spegnerebbe il controllore proprio dove il dato è meno compreso.

Ciò che un documento non può dire

Nulla è opzionale: name: string vuol dire presente, perché il campione lo conteneva. Se il campo a volte manca, la modifica è name?: string, e string | null se può essere nullo: il campione prova solo ciò che contiene.

Un array eterogeneo diventa un’unione, (number | string)[], che descrive il campione con precisione e sarà forse più larga o più stretta dei tuoi dati veri. E una chiave che non è un identificatore valido tiene le sue virgolette: "content-type": string.

Privato per progettazione

Tutto viene eseguito localmente nel browser con JavaScript. I tuoi dati non vengono mai caricati, quindi lo strumento è sicuro per contenuti sensibili e funziona anche offline.

Domande frequenti

Gli oggetti generati sono esatti o inesatti?
Non è scritto né l’uno né l’altro: l’uscita usa `{ … }` semplice, quindi decide il tuo `.flowconfig`. Con `exact_by_default=true` — l’impostazione delle versioni recenti di Flow — quegli oggetti sono esatti; senza, inesatti. Scrivere `{| |}` o un `...` finale imporrebbe una scelta di progetto che il campione ignora.
Perché `mixed` e non `any`?
Perché `mixed` è quello onesto. Un array vuoto non dice nulla dei suoi elementi, e `mixed` dice esattamente questo obbligandoti a raffinare prima dell’uso. `any` direbbe lo stesso e poi lascerebbe passare ogni errore in silenzio: un tipo ignoto non è una ragione per spegnere il controllore.
Conviene ancora avviare un progetto in Flow?
È una tua decisione, e lo strumento serve in entrambi i casi. Flow è vivo e usato, soprattutto in basi di codice anteriori all’ascesa di TypeScript o vicine all’ecosistema Meta. Se scegli oggi senza vincoli del genere, TypeScript ha la libreria di definizioni più ampia — e questo sito converte anche verso di lui.

Convertitori correlati