Naar de inhoud

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

  1. Plak een JSON-object in de editor.
  2. 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.
  3. 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[].

Specificaties en referenties