JSPM

@tslite/infer

0.1.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 11
  • Score
    100M100P100Q36287F
  • License MIT

Infer real TypeScript types from raw JSON data — one type from many samples, then emit .d.ts

Package Exports

  • @tslite/infer

Readme

@tslite/infer

Infer real TypeScript types from raw JSON data — one type from many samples, then emit .d.ts.

import { inferTypeScript } from "@tslite/infer";

const orders = await fetch("/api/orders").then((r) => r.json());

inferTypeScript(orders, { rootName: "Order" });
// export type Item = { sku: string; qty: number };
// export type Order = {
//   id: number;
//   customer: { name: string; address: Address };
//   items: Item[];
//   shipTo: Address;          // shapes recorrentes viram tipos nomeados
//   coupon?: string;          // campos ausentes em algumas amostras → opcionais
// };

Por quê

O alvo é o tipo, não o schema. Existem libs que vão direto de dados para JSON Schema; esta infere para a álgebra de tipos do @tslite/checker — o nosso TypeScript, a SSOT — e daí emite .d.ts. JSON Schema, se você quiser, é um passo posterior de outra lib.

  • Merge = supremo (lub). Dobrar amostras é o menor tipo que aceita todas. Como o supremo é associativo/comutativo/idempotente, a inferência é um fold — funciona em streaming, com memória O(tipo), não O(volume). 1GB de JSON → um tipo pequeno.
  • Indutivo e honesto. Array sempre vazio → never[] (como no TS), não um chute. findHoles aponta onde faltou evidência.
  • Configurável. Defaults cobrem o comum; callbacks (identityOf, shouldName, nameOf) abrem as decisões — inclusive unificar shapes parecidos.

Instalação

pnpm add @tslite/infer

Essencial

import {
  inferValue, // um valor      → tipo
  reduceSchema, // uma coleção → tipo único
  reduceSchemaFromIterable, // streaming (async)
  extractTypes, // tipo → tipos nomeados
  toTypeScript, // tipos nomeados → .d.ts
  inferTypeScript, // dados → .d.ts (atalho)
  findHoles, // onde faltou evidência
} from "@tslite/infer";

Documentação

Licença

MIT © Anderson D. Rosa