json to typeorm entity converter

typetools

instant, client-side type converter • 0ms network latency

root:
inputjson
paste or drop file
307 chars
outputtypeorm
*.ts
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

@Entity("metadata")
export class MetadataEntity {
  @PrimaryGeneratedColumn("uuid")
  id!: string;

  @Column({ type: "timestamptz", nullable: false })
  lastLogin!: Date;

  @Column({ type: "varchar", nullable: false })
  ipAddress!: string;

  @Column({ type: "jsonb", nullable: true })
  failedAttempts?: unknown;

}

@Entity("root_payload")
export class RootPayloadEntity {
  @PrimaryGeneratedColumn("uuid")
  id!: string;

  @Column({ type: "varchar", nullable: false })
  userId!: string;

  @Column({ type: "varchar", nullable: false })
  username!: string;

  @Column({ type: "varchar", nullable: false })
  email!: string;

  @Column({ type: "boolean", nullable: false })
  isActive!: boolean;

  @Column({ type: "double precision", nullable: false })
  score!: number;

  @Column({ type: "jsonb", nullable: false })
  roles!: unknown;

  @Column({ type: "jsonb", nullable: false })
  metadata!: unknown;

  @Column({ type: "jsonb", nullable: false })
  tags!: unknown;

}
0.15ms•in-browser
documentation, edge cases & specifications below

step-by-step integration guide

technical specification differences & end-to-end conversion workflow

Decorator-Driven ORM Mapping: JSON Payloads to TypeORM Entities

TypeORM is the standard relational ORM for NestJS and enterprise TypeScript backends, relying on TypeScript Stage-2/Stage-3 decorators (@Entity(), @PrimaryGeneratedColumn(), @Column(), @CreateDateColumn()) and reflect-metadata to map class properties to PostgreSQL, MySQL, or SQL Server tables. However, when TypeScript's strictNullChecks is enabled, a property typed as string | null compiles its emitted design-time metadata type as Object rather than String. If a developer writes @Column() middleName: string | null; without specifying an explicit SQL column type inside the decorator options, TypeORM will throw a ColumnTypeUndefinedError at application startup.

Explicit Column Type Synthesis and StrictPropertyInitialization Safety

Our JSON-to-TypeORM generator inspects your JSON AST and emits production-ready @Entity() classes that compile cleanly under strict TypeScript settings (strict: true, strictPropertyInitialization: true). Every property declaration includes the definite assignment assertion operator (!) and explicit SQL column type options inside the @Column({ type: '...', name: '...', nullable: true }) decorator. Primary keys are automatically recognized and decorated with @PrimaryGeneratedColumn('uuid') or @PrimaryGeneratedColumn('increment') based on whether the sampled ID is a UUID string or an integer. Nested objects and complex arrays are mapped either to @Column({ type: 'jsonb' }) or extracted into child @OneToMany / @ManyToOne entity classes.

frequently asked questions

common developer questions answered

q:Why does TypeORM require an explicit 'type' inside @Column({ type: 'varchar', nullable: true }) for union types?

When a TypeScript property is typed as a union like 'string | null', TypeScript's reflect-metadata compiler emits design:type as Object instead of String. Explicitly passing type: 'varchar' (or 'text'/'int') in @Column prevents TypeORM startup crashes.

q:Why do the generated TypeORM entity properties use the '!' definite assignment operator?

Because TypeORM instantiates entities internally without requiring you to pass every column into a class constructor, adding '!' (e.g., @Column() email!: string;) satisfies TypeScript's strictPropertyInitialization compiler check.

q:How are audit timestamp fields like created_at and updated_at handled?

When the AST analyzer detects created_at or updated_at ISO timestamp fields, it automatically upgrades their decorators to @CreateDateColumn() and @UpdateDateColumn().

topic cluster

related type & ast converters

3 interconnected tools