Gere um schema de validação Zod com inferência de tipos TypeScript a partir de um objeto de configuração aninhado. Cole config JSON e obtenha um schema para...
// Generated by DevBento — json-to-typescript
interface RootApp {
name: string;
version: string;
debug: boolean;
}
interface RootDatabaseCredentials {
user: string;
password: string;
}
interface RootDatabase {
host: string;
port: number;
credentials: RootDatabaseCredentials;
}
interface RootFeatures {
darkMode: boolean;
maxConnections: number;
allowedOrigins: string[];
}
interface Root {
app: RootApp;
database: RootDatabase;
features: RootFeatures;
}Este exemplo converte uma configuração de aplicação aninhada em um schema de validação Zod com inferência de tipos TypeScript. O JSON preenchido tem configurações de app, uma seção de banco de dados com credenciais e feature flags. O modo Zod está pré-selecionado, então o schema aparece assim que a página carrega.
A ferramenta produz:
RootSchema com z.object() para a config de nível superiorRootDatabaseSchema e RootDatabaseCredentialsSchema para a seção aninhada de banco de dadosRootFeaturesSchema para feature flags, incluindo o array de origins permitidasz.string(), z.number(), z.boolean(), z.array(z.string())z.infer<typeof SchemaName>zod incluídanpm install zod)O padrão de config fail-fast: monte o objeto de config a partir de variáveis de ambiente ou de um arquivo, faça parse com o schema no topo do seu entrypoint e falhe imediatamente com um erro legível se algo estiver errado. Todos os outros módulos importam o tipo inferido, então o formato da config é definido uma vez e reforçado tanto em runtime quanto em compile time.
Variáveis de ambiente sempre chegam como strings, mesmo para números e booleanos. Se sua config vem de process.env, adicione z.coerce.number() para portas e limites, e um passo de preprocessamento booleano para flags. O schema gerado dá a estrutura na qual pendurar esses refinamentos.
Quando a validação falha em produção, registre os caminhos dos issues do Zod, não os valores. A config frequentemente contém segredos como credenciais de banco de dados, e os caminhos dos issues (database.credentials.user) apontam o problema sem vazar o segredo para os logs.
Nothing you paste leaves this tab. Every tool runs entirely in your browser — no upload, no server, no account.