JSON sang TypeScript

Tạo TypeScript interface từ JSON

Thử ví dụ
Tên interface gốc:

Đầu vào JSON

Đầu ra TypeScript

Chạy cục bộ · An toàn để dán thông tin bí mật
TypeScript interface sẽ hiển thị ở đây…

Chuyển đổi JSON sang TypeScript là gì?

Dán một JSON payload và bạn nhận lại TypeScript interface — các hợp đồng có kiểu mô tả chính xác đối tượng có những thuộc tính nào và mỗi thuộc tính giữ kiểu dữ liệu gì. Nếu không có chúng, dữ liệu từ JSON.parse() trả về dưới dạng any, khiến trình soạn thảo không hỗ trợ và trình biên dịch không kiểm tra việc truy cập hoặc gán thuộc tính. Chuyển đổi JSON sang TypeScript mang lại sự an toàn đó mà không cần viết interface thủ công.

TypeScript bao phủ cả sáu kiểu giá trị JSON: string, number, boolean, null, object và array. Mỗi đối tượng JSON lồng nhau biến thành interface riêng có tên. Mảng được suy kiểu từ phần tử đầu tiên. Kết quả khớp với những gì JSON.parse() thực sự trả về lúc chạy, vì vậy các interface phản ánh dữ liệu thực thay vì phỏng đoán.

Viết interface thủ công cho JSON lớn hoặc lồng nhau sâu rất tẻ nhạt và dễ mắc lỗi. Một bộ tạo JSON sang TypeScript đọc cấu trúc tự động, xử lý lồng nhau theo đệ quy và xuất mã interface sạch trong vài giây. Điều này đặc biệt hữu ích khi kết nối với API chưa quen, tạo nguyên mẫu với dữ liệu giả, hoặc chuyển đổi codebase JavaScript sang TypeScript. Nó cũng giải phóng bạn khỏi việc theo dõi thủ công tên và kiểu thuộc tính lồng nhau, để bạn tập trung vào logic ứng dụng thay vì mã soạn sẵn về kiểu.

Tại sao dùng bộ tạo JSON sang TypeScript?

Tạo TypeScript interface thủ công khả thi với các đối tượng nhỏ, nhưng nhanh chóng gặp khó khăn với cấu trúc lồng nhau hoặc phản hồi API lớn. Hãy xem xét phản hồi API 50 trường với ba cấp lồng nhau — viết thủ công có nghĩa là hàng chục interface, mỗi cái là nguồn tiềm ẩn của lỗi đánh máy hoặc trường nullable bị bỏ sót. Bộ tạo tự động tạo ra toàn bộ tập hợp trong vài mili giây và giảm nguy cơ không khớp kiểu giữa mã của bạn và dữ liệu nó sử dụng. Ngoài độ chính xác, nó giữ các kiểu đồng bộ với hợp đồng API thực tế. Khi một dịch vụ thay đổi cấu trúc phản hồi, chỉ cần dán JSON mới và tạo lại — nhanh hơn nhiều so với tìm từng thuộc tính đã thay đổi trong file interface viết tay.

Tạo interface ngay lập tức
Dán bất kỳ JSON payload nào và nhận interface có kiểu chính xác trong vài mili giây. Không cần cấu hình, không cần bước build.
🔒
Giữ dữ liệu riêng tư
Toàn bộ quá trình chuyển đổi chạy trong trình duyệt. JSON của bạn không bao giờ rời khỏi máy, điều này quan trọng khi làm việc với dữ liệu production hoặc phản hồi API nội bộ.
📋
Xử lý cấu trúc lồng nhau tự động
Các đối tượng lồng nhau tạo ra các interface riêng có tên. Mảng, trường nullable và kiểu hỗn hợp đều được giải quyết mà không cần can thiệp thủ công.
🌐
Không cần tài khoản hay cài đặt
Hoạt động trên mọi trình duyệt hiện đại. Không cần cài gói npm, không cần cấu hình công cụ CLI, không cần điền form đăng ký.

Các trường hợp sử dụng JSON sang TypeScript

Tích hợp API Frontend
Dán phản hồi JSON từ REST hoặc GraphQL để tạo interface cho các component React, Angular hoặc Vue. Prop và state có kiểu an toàn ngăn ngừa lỗi lúc chạy. Bạn cũng có thể chia sẻ interface đã tạo giữa frontend và backend trong monorepo để cả hai phía đồng thuận về cùng một cấu trúc dữ liệu.
Định kiểu phản hồi Backend
Các dịch vụ Node.js và Deno sử dụng API bên thứ ba được hưởng lợi từ interface đã tạo. Định nghĩa hợp đồng một lần, phát hiện không khớp cấu trúc tại thời điểm biên dịch. Interface đã tạo cũng là tài liệu gọn nhẹ cho người dùng dịch vụ, giảm nhu cầu file schema riêng hoặc trang wiki.
File cấu hình DevOps
Các công cụ hạ tầng như AWS CDK hoặc Pulumi dùng file cấu hình JSON. Tạo kiểu TypeScript cho các cấu hình đó để xác thực trước khi triển khai. Điều này phát hiện các lần triển khai cấu hình sai do lỗi đánh máy hoặc kiểu giá trị sai trước khi mã đến production.
Dữ liệu kiểm thử QA
Tạo interface từ dữ liệu kiểm thử JSON để các assertion khớp với cấu trúc dữ liệu mong đợi. Phát hiện trường thiếu hoặc bị đổi tên trước khi các bài kiểm thử chạy.
Hợp đồng Data Pipeline
Khi một pipeline tạo ra đầu ra JSON, các interface đã tạo hoạt động như schema cho các consumer phía sau. Thay đổi cấu trúc đầu ra kích hoạt lỗi tại thời điểm biên dịch.
Học TypeScript
Sinh viên và lập trình viên mới với TypeScript có thể dán các cấu trúc JSON quen thuộc và xem cách interface ánh xạ với dữ liệu. Nó thu hẹp khoảng cách giữa kiểu động và kiểu tĩnh.

Bảng tham chiếu ánh xạ kiểu JSON sang TypeScript

Mỗi giá trị JSON ánh xạ sang một kiểu TypeScript. Bảng dưới đây cho thấy cách mỗi kiểu nguyên thủy và cấu trúc JSON dịch sang. Ánh xạ này tuân theo chuẩn JSON ECMA-404 và các kiểu tích hợp sẵn của TypeScript.

Kiểu JSONGiá trị ví dụKiểu TypeScript
string"hello"string
number42, 3.14number
booleantrue, falseboolean
nullnullnull
object{"key": "value"} nested interface
array[1, 2, 3]number[] (inferred from first element)

interface và type Alias trong TypeScript

TypeScript cung cấp hai cách mô tả cấu trúc đối tượng: khai báo interface và type alias. Cả hai đều dùng để biểu diễn cấu trúc JSON, nhưng khác nhau về hành vi mở rộng và gộp. Hầu hết các bộ tạo JSON sang TypeScript xuất interface vì đây là lựa chọn chuẩn cho cấu trúc đối tượng trong TypeScript.

interface
Hỗ trợ gộp khai báo và cú pháp extends. Ưu tiên dùng cho cấu trúc đối tượng, đặc biệt trong API công khai và thư viện. Có thể được mở rộng bởi các interface khác hoặc giao với các type.
type
Hỗ trợ union type, intersection type và mapped type. Phù hợp hơn cho kiểu tính toán, union phân biệt, hoặc khi cần đặt bí danh cho kiểu nguyên thủy. Không thể mở lại để gộp khai báo.

Ví dụ mã nguồn

Dưới đây là các ví dụ tạo TypeScript interface từ JSON trong các ngôn ngữ và công cụ khác nhau. Mỗi đoạn mã tạo ra đầu ra có thể chạy được.

TypeScript
// Manual interface definition from a JSON shape
const json = '{"id": 1, "name": "Alice", "active": true}';
const parsed = JSON.parse(json);

interface User {
  id: number;
  name: string;
  active: boolean;
}

const user: User = parsed;
console.log(user.name); // "Alice" — fully typed
JavaScript (json-to-ts library)
import JsonToTS from 'json-to-ts';

const json = {
  id: 1,
  name: "Alice",
  address: { street: "123 Main St", city: "Springfield" },
  tags: ["admin", "user"]
};

const interfaces = JsonToTS(json, { rootName: "User" });
console.log(interfaces.join("\n\n"));
// interface Address {
//   street: string;
//   city: string;
// }
//
// interface User {
//   id: number;
//   name: string;
//   address: Address;
//   tags: string[];
// }
Python (datamodel-code-generator)
# Install: pip install datamodel-code-generator
# Generate TypeScript-style types from JSON using Pydantic models

# Command line:
# datamodel-codegen --input data.json --output model.py

# Or generate TypeScript directly with quicktype:
# pip install quicktype
# quicktype --lang ts --src data.json --out types.ts

import json

data = {"id": 1, "name": "Alice", "scores": [98, 85, 92]}

# Python equivalent using TypedDict (Python 3.8+)
from typing import TypedDict, List

class User(TypedDict):
    id: int
    name: str
    scores: List[int]

user: User = data  # type-checked by mypy
CLI (quicktype)
# Install quicktype globally
npm install -g quicktype

# Generate TypeScript interfaces from a JSON file
quicktype --lang ts --src data.json --out types.ts

# From a JSON string via stdin
echo '{"id": 1, "name": "Alice"}' | quicktype --lang ts

# Output:
# export interface Root {
#   id:   number;
#   name: string;
# }

Câu hỏi thường gặp

JSON sang TypeScript xử lý trường tùy chọn như thế nào?
Nếu một giá trị JSON là null, bộ tạo đánh dấu thuộc tính là tùy chọn với hậu tố ? và gán kiểu null. Nếu bạn cần phân biệt giữa key thiếu và giá trị null, bạn có thể điều chỉnh đầu ra thủ công để dùng undefined cho các thuộc tính thiếu.
Tôi có thể chuyển đổi mảng JSON sang TypeScript không?
Có. Nếu JSON gốc của bạn là mảng, bộ tạo kiểm tra phần tử đầu tiên để suy kiểu phần tử và xuất interface cho phần tử đó. Kiểu gốc trở thành interface đó theo sau bởi []. Mảng rỗng tạo ra unknown[] vì không có phần tử để kiểm tra.
Điều gì xảy ra với các đối tượng JSON lồng nhau sâu?
Mỗi đối tượng lồng nhau tạo ra một interface riêng có tên. Tên được lấy từ key thuộc tính, chuyển sang PascalCase. Ví dụ, thuộc tính tên "shipping_address" tạo ra interface tên ShippingAddress. Điều này giữ đầu ra dễ đọc ngay cả với JSON có bốn hoặc năm cấp lồng nhau. Nếu nhiều đối tượng lồng nhau có cùng cấu trúc, bạn có thể muốn gộp thủ công chúng thành một interface dùng chung để giảm trùng lặp trong codebase.
json2ts và quicktype có gì khác nhau?
json2ts là bộ chuyển đổi đơn giản ánh xạ trực tiếp các giá trị JSON sang TypeScript interface. quicktype đi xa hơn bằng cách phân tích nhiều mẫu JSON, loại bỏ trùng lặp các cấu trúc tương tự và hỗ trợ đầu ra trong hơn 20 ngôn ngữ. Với các lần chuyển đổi đơn lẻ, công cụ trên trình duyệt nhanh hơn. Với CI pipeline hoặc sinh mã đa ngôn ngữ, quicktype phù hợp hơn.
Tại sao dùng interface thay vì type alias cho JSON?
Interface hỗ trợ gộp khai báo, nghĩa là bạn có thể mở rộng interface đã tạo trong file riêng mà không sửa bản gốc. Chúng cũng tạo ra thông báo lỗi rõ ràng hơn trong hầu hết các trình soạn thảo. Type alias tốt hơn khi bạn cần union type hoặc mapped type, nhưng với cấu trúc đối tượng JSON đơn giản, interface là lựa chọn chuẩn. Nếu bạn đang tạo thư viện hoặc SDK, interface hầu như luôn là lựa chọn đúng vì các consumer phía sau có thể mở rộng chúng bằng gộp khai báo mà không cần chạm vào mã nguồn của bạn.
Công cụ này có thể xử lý JSON với kiểu không nhất quán trong mảng không?
Bộ tạo suy kiểu phần tử mảng từ phần tử không null đầu tiên. Nếu mảng chứa kiểu hỗn hợp — ví dụ đối tượng lẫn với chuỗi — đầu ra chỉ phản ánh cấu trúc phần tử đầu tiên. Với mảng không đồng nhất, bạn cần định nghĩa thủ công kiểu mảng union sau khi tạo, chẳng hạn kiểu chấp nhận cả phần tử Item lẫn string, để biểu diễn chính xác tất cả các kiểu phần tử có thể.
Làm thế nào để dùng interface đã tạo trong dự án thực?
Sao chép các interface đã tạo vào file .ts trong dự án, thường trong thư mục types/ hoặc models/. Import chúng ở nơi bạn lấy hoặc xử lý dữ liệu JSON. Kết hợp chúng với bộ xác thực lúc chạy như Zod hoặc io-ts nếu bạn cần đảm bảo phản hồi API khớp với interface lúc chạy, không chỉ lúc biên dịch. Với Zod, bạn có thể suy kiểu TypeScript trực tiếp từ schema bằng tiện ích infer, loại bỏ sự trùng lặp giữa định nghĩa interface và logic xác thực.
TypeScript interface đã tạo có cung cấp an toàn kiểu lúc chạy không?
Không — hệ thống kiểu của TypeScript bị xóa khi biên dịch. Interface chỉ tồn tại trong trình soạn thảo và trong quá trình build, không phải lúc chạy. JSON.parse() luôn trả về any bất kể kiểu bạn gán sau đó. Để thực thi kiểu lúc chạy, kết hợp interface đã tạo với thư viện như Zod hoặc io-ts. Các thư viện này xác thực rằng đối tượng đầu vào thực sự khớp với cấu trúc mong đợi trước khi bạn sử dụng, bảo vệ khỏi phản hồi API sai định dạng, trường thiếu và giá trị null không mong muốn.