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.