A JSON to TypeScript converter takes a JSON object or API response and generates the corresponding TypeScript interfaces or type definitions — saving you from manually typing out nested type structures.
If you have ever stared at a 50-field API response trying to figure out which fields are optional, which are nullable, and which are nested arrays of objects, this tool does it in seconds. This guide covers how the conversion works, how to handle edge cases, and best practices for using generated types in real projects.
Generate TypeScript Types from JSON
Paste any JSON and get clean TypeScript interfaces instantly. Handles nested objects, arrays, and optional fields.
How JSON to TypeScript Conversion Works
The converter analyzes the JSON structure and maps each value to its TypeScript type:
| JSON Value | TypeScript Type | Example |
|---|---|---|
| "string" | string | "name": "Raj" → name: string |
| 123 | number | "age": 25 → age: number |
| true/false | boolean | "active": true → active: boolean |
| null | null | "deleted": null → deleted: null |
| [...] | Type[] | "tags": ["a","b"] → tags: string[] |
| {...} | Interface | Nested object → separate interface |
Simple Example
// Input JSON
{ "name": "Raj", "age": 25, "active": true }
// Generated TypeScript
interface Root {
name: string;
age: number;
active: boolean;
}
The tool can generate either "interface" or "type" declarations. Interfaces are preferred for object shapes (they support extension and declaration merging). Types are better for unions and primitives.
Handling Nested Objects and Arrays
Real-world JSON is rarely flat. Here is how the converter handles complex structures:
Nested Object
// Input JSON
{
"user": {
"name": "Priya",
"address": {
"city": "Mumbai",
"pin": "400001"
}
}
}
// Generated TypeScript
interface Address {
city: string;
pin: string;
}
interface User {
name: string;
address: Address;
}
interface Root {
user: User;
}
Array of Objects
// Input JSON
{ "users": [{ "id": 1, "name": "Raj" }, { "id": 2, "name": "Priya" }] }
// Generated TypeScript
interface User {
id: number;
name: string;
}
interface Root {
users: User[];
}
The converter creates separate named interfaces for each nested object type, keeping the output clean and reusable.
Edge Cases: Optional Fields, Nulls, and Mixed Arrays
These are the tricky situations that make manual typing tedious:
Optional Fields
If you provide multiple JSON objects (like an array of records) and a field appears in some but not all, the converter marks it as optional:
// Input: [{ "name": "Raj", "email": "raj@x.com" }, { "name": "Priya" }]
interface Root {
name: string;
email?: string; // optional — missing in second object
}
Nullable Fields
// Input: { "name": "Raj", "phone": null }
interface Root {
name: string;
phone: null | string; // union with null
}
Mixed Arrays
// Input: { "data": [1, "two", true] }
interface Root {
data: (number | string | boolean)[];
}
If you paste a single JSON object, the converter cannot detect optional fields — it treats all fields as required. For best results, paste an array of 2-3 representative objects to capture optional fields.
Workflow: Generating Types from API Responses
The most common use case is generating types from REST API responses. Here is the recommended workflow:
- Fetch a sample response — Use Postman, curl, or browser DevTools to get a real response from the API endpoint
- Paste into the converter — Copy the full JSON response and paste it
- Review and rename — The tool generates names like "Root", "Item", etc. Rename them to meaningful names like "UserResponse", "Product"
- Add to your project — Copy the generated types into a .ts file (e.g., types/api.ts)
- Refine manually — Add union literals, enums, or stricter types where you know the exact values
Before and After Refinement
// Generated
interface Product {
status: string;
category: string;
}
// Refined
interface Product {
status: "active" | "draft" | "archived";
category: "electronics" | "clothing" | "books";
}
Generate types from the API response, then tighten them. It is faster to narrow auto-generated types than to write them from scratch.
When to Use Interface vs Type in TypeScript
The converter lets you choose between interface and type output. Here is when to use each:
| Feature | Interface | Type |
|---|---|---|
| Object shapes | Preferred | Works |
| Extension (extends) | Yes | Via intersection (&) |
| Declaration merging | Yes | No |
| Union types | No | Yes |
| Mapped types | No | Yes |
| Primitive aliases | No | Yes |
Rule of thumb: Use interfaces for API response types and data models. Use type aliases for unions, computed types, and utility types.
Best Practices for Generated TypeScript Types
Auto-generated types are a starting point, not the final product. Follow these practices:
- Rename generic names — Change "Root" to "ApiResponse", "Item" to "Product", etc. Meaningful names improve code readability.
- Separate request and response types — Do not reuse response types for request payloads. They often differ (POST body has fewer fields than GET response).
- Export from a central file — Keep all API types in a types/ directory. Import from there instead of defining inline.
- Add JSDoc for unclear fields — If the API returns a field like "st" that means "status", add a brief comment.
- Use strict null checks — Enable "strictNullChecks": true in tsconfig.json. This makes null and undefined handling explicit.
- Version your types — When the API changes, update types and fix all type errors rather than using "any" to suppress them.
If the converter generates a field you are unsure about, use "unknown" instead of "any". Unknown is type-safe — it forces you to check the type before using it.
How to Use the Tool (Step by Step)
- 1
Paste Your JSON
Copy a JSON object or API response and paste it into the input area.
- 2
Choose Output Format
Select interface or type alias. Choose whether to generate nested interfaces or inline types.
- 3
Configure Options
Set root type name, optional fields detection, and null handling preferences.
- 4
Generate and Copy
Click generate to see TypeScript types. Copy the output directly into your .ts file.
Frequently Asked Questions
What is the difference between interface and type in TypeScript?+−
Interfaces are for object shapes and support extension (extends) and declaration merging. Types support unions, intersections, and mapped types. For API response types, interfaces are generally preferred.
Can the converter handle deeply nested JSON?+−
Yes. It recursively processes nested objects and creates separate named interfaces for each level. A 5-level deep JSON will generate 5+ interfaces with proper type references.
How does it handle null values?+−
Null values are typed as null by default. If you want null | string (assuming the field could be a string), paste a second sample where the field has a string value to get the union type.
Can I convert a JSON array to TypeScript?+−
Yes. An array of objects generates an interface for the object shape plus a typed array. For example, [{"id": 1}] generates interface Item { id: number } and type Root = Item[].
What about Date fields in JSON?+−
JSON has no Date type — dates are strings like "2026-04-09T10:30:00Z". The converter types them as string. You should manually change these to Date or create a branded type if needed.
Is the generated TypeScript ready for production?+−
It is a strong starting point. For production, rename generic type names, tighten string fields to union literals where possible, and add documentation. The tool handles 80-90% of the work.
Can it convert TypeScript back to JSON?+−
No, this is a one-way conversion. TypeScript types are compile-time constructs and do not have runtime JSON equivalents. Use a JSON Schema generator for bidirectional definitions.
Is this converter free and private?+−
Yes. Conversion happens entirely in your browser. Your JSON data is not sent to any server.
Generate TypeScript Types from JSON
Paste any JSON and get clean TypeScript interfaces instantly. Handles nested objects, arrays, and optional fields.
Open JSON to TypeScript Converter ->Related Guides
JSON Formatter Guide
A complete developer reference for JSON syntax, common errors, formatting options, and how to validate JSON in any language or tool.
JSON Tree Viewer Guide
View JSON as an expandable tree, search keys/values, copy paths, and navigate deeply nested API responses and config files.
JSON Schema Generator — Complete Guide
Generate, validate and understand JSON Schema for APIs, TypeScript and OpenAPI
CSV to JSON Converter Guide
Convert CSV files to JSON arrays or objects. Understand CSV parsing, handle commas in fields, Excel exports, type detection, and transform data for APIs and databases.