JSON naar Flow-typen omzetten — Numio
Genereert aliassen van het stroomtype uit een JSON-voorbeeld, beginnend met // @flow. Elk genest object krijgt zijn eigen geëxporteerde type, en sleutels die in sommige array-items ontbreken, zijn optioneel gemarkeerd met ?.
API-antwoorden typen in een React- of React Native-codebase die nog steeds Flow gebruikt.
JSON
Flow
Wanneer gebruik je dit?
- API-antwoorden typen in een React- of React Native-codebase die nog steeds Flow gebruikt.
- Typen schrijven voor armaturen of proefgegevens in een Flow-checked testsuite.
Hoe werkt het
- Plak een JSON-object in de editor.
- Open de instellingen om het voorvoegsel (standaard I) en de rootnaam (standaard RootObject) te wijzigen; het roottype wordt IRootObject en geneste typen krijgen hetzelfde voorvoegsel.
- Kopieer de geëxporteerde typen naar een .js-bestand waarin de header // @flow behouden blijft.
JSON-ingang
{
"id": 42,
"name": "Ada Lovelace",
"email": null,
"active": true,
"score": 98.5,
"tags": ["admin", "dev"],
"address": { "city": "London", "postCode": "NW1" }
}Flow-typen
// @flow
export type IRootObject = {
id: number
name: string
email: null
active: boolean
score: number
tags: string[]
address: IAddress
}
export type IAddress = {
city: string
postCode: string
}Details en beperkingen
Draait in de browser met de json-ts-bibliotheek en het resultaat is geformatteerd met Prettier; er wordt niets geüpload.
Flow heeft geen naamruimten, dus de pagina biedt alleen een voorvoegsel en hoofdnaam; de uitvoer bestaat altijd uit uitvoertypeverklaringen op het hoogste niveau.
null-waarden worden getypt als null en lege arrays als any[]. Wijzig ze in misschien typen zoals ?string als het veld een waarde kan bevatten.
De uitvoer gebruikt onnauwkeurige objecttypen en geen $ReadOnly; voeg {| |} of alleen-lezen wrappers als uw project deze vereist.
FAQ
Hoe worden optionele velden gedetecteerd?
Alleen voor arrays van objecten: een sleutel die bij sommige items ontbreekt, wordt optioneel, bijvoorbeeld giftWrap?: boolean. Sleutels op het hoogste niveau zijn nooit optioneel omdat een enkel object geen ander voorbeeld heeft om mee te vergelijken.
Kan ik een JSON-array in de root converteren?
Ja. De root wordt een arrayalias zoals exporttype IRootObject = IRootObjectItem[], en het itemtype voegt de sleutels van alle elementen samen, waarbij ontbrekende sleutels als optioneel zijn gemarkeerd.
Kan het arrays van het gemengde type aan?
Ja, een platte array zoals ["a", 2] wordt (string | nummer)[]. Geneste arrays worden any[].