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.findHolesaponta 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/inferEssencial
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