JSON sang TypeScript

Công cụ trực tuyến miễn phí JSON sang TypeScript. Tự động suy luận dữ liệu JSON thành định nghĩa kiểu interface TS chuẩn. Hỗ trợ interface con lồng nhau, kiểu hợp nhất mảng, trường tùy chọn và readonly, lựa chọn thụt lề 2/4 dấu cách, xử lý hoàn toàn cục bộ trong trình duyệt không tải lên.

Đề xuất Liên quan

Về JSON sang TypeScript: tự động biến dữ liệu JSON thành kiểu TS

JSON sang TypeScript là quá trình chuyển đổi dữ liệu ở định dạng JSON (đối tượng JSON hoặc mảng JSON) thành khai báo kiểu interface TypeScript. JSON (JavaScript Object Notation) là định dạng dữ liệu chuẩn cho REST API, tệp cấu hình, nhật ký và hiện diện ở khắp nơi trong phát triển frontend và backend, trong khi TypeScript là tập cha của JavaScript, bổ sung kiểm tra kiểu tĩnh cho mã. Trong phát triển, thường cần viết một interface TS tương ứng cho JSON mà API trả về, việc viết thủ công dễ mắc lỗi và tốn thời gian — công cụ này nhằm tự động hóa quá trình đó.

Cốt lõi của công cụ là tự động suy luận cấu trúc của đối tượng JSON thành interface TypeScript. Mỗi key của đối tượng JSON trở thành tên thuộc tính của interface, mỗi kiểu chữ của value được ánh xạ sang kiểu TS tương ứng: chuỗi thành `string`, số thành `number`, boolean thành `boolean`, null thành `null`, mảng thành `T[]`, đối tượng lồng nhau thành interface con độc lập. Toàn bộ quá trình hoàn tất cục bộ trong trình duyệt, không cần dịch vụ backend, tạo định nghĩa kiểu đầy đủ và có thể sử dụng được trong vài giây.

Suy luận kiểu là cốt lõi của chuyển đổi JSON sang TypeScript. Bản thân JSON chỉ có 6 kiểu cơ bản (null, boolean, number, string, array, object), trong khi hệ thống kiểu cơ bản của TypeScript bao gồm string, number, boolean, null, undefined, any, unknown, void, never, object, Array, T[], kiểu hợp nhất (A | B), v.v. Hàm getTsType của công cụ chúng tôi ánh xạ theo typeof và hình thức cụ thể của value: typeof null ánh xạ thành `null`; typeof undefined ánh xạ thành `undefined`; typeof boolean ánh xạ thành `boolean`; typeof number ánh xạ thành `number`; typeof string ánh xạ thành `string`; khi Array.isArray() trúng, xử lý như mảng.

Xử lý đối tượng lồng nhau là khả năng quan trọng của công cụ. Khi JSON chứa các đối tượng lồng nhau, công cụ sẽ tạo đệ quy các interface con độc lập, tránh trùng lặp kiểu. Ví dụ: `address: { street, city }` sẽ tạo interface con `RootAddress`, và interface chính sẽ tham chiếu nó thông qua `address: RootAddress`. Quy tắc đặt tên interface con: "tên interface cha + chữ cái đầu của tên trường viết hoa", giữ cho sự rõ ràng về ngữ nghĩa. Set processedTypes được sử dụng để khử trùng lặp, các đối tượng lồng nhau có cùng cấu trúc chỉ tạo interface một lần.

Suy luận kiểu mảng có ba chế độ xử lý. Thứ nhất, khi mảng trống, tạo `any[]` dự phòng (vì không thể suy luận kiểu phần tử). Thứ hai, khi tất cả phần tử cùng kiểu, tạo dạng `T[]` (ví dụ: `string[]`, `User[]`). Thứ ba, khi kiểu phần tử không nhất quán, tạo mảng hợp nhất `(A | B)[]` (ví dụ: `(string | number)[]`). Sự phân biệt này làm cho kiểu được tạo vừa chính xác vừa dễ đọc, tránh sử dụng quá mức `any[]` không cần thiết.

Trường tùy chọn (?) là một tính năng quan trọng của chế độ TypeScript strict. Khi bật, công cụ quét giá trị của mỗi trường, và nếu là null hoặc undefined, sẽ thêm công cụ sửa đổi `?` vào interface: `name?: string` có nghĩa là trường đó có thể bị bỏ qua. Điều này rất hữu ích cho các trường tùy chọn mà API backend trả về, tránh lỗi thời gian chạy khi truy cập các trường undefined. Trường readonly nhấn mạnh tính bất biến, mã được tạo có dạng `readonly id: number`, phù hợp để định nghĩa cấu hình, ảnh chụp nhanh trạng thái, DTO, v.v.

interface vs type alias là lựa chọn phổ biến đối với người dùng TypeScript. Công cụ này chọn tạo interface một cách nhất quán, vì interface là cách chuẩn để mô tả kiểu đối tượng trong TypeScript, hỗ trợ hợp nhất khai báo (declaration merging), từ khóa implements, kế thừa extends, phù hợp hơn với các tiêu chuẩn mã hóa của các dự án frontend chính như React, Vue, Angular. type alias mạnh hơn trong việc mô tả kiểu hợp nhất, kiểu giao, kiểu hàm, nhưng với kiểu đối tượng, interface được ưa chuộng.

Chuyển đổi thời gian thực là một tính năng thiết thực của công cụ. Sau khi người dùng nhập JSON, sau 400ms debounde sẽ tự động kích hoạt chuyển đổi, không cần nhấp nút thủ công. Kết hợp với tô sáng cú pháp TypeScript của CodeMirror (thông qua tùy chọn typescript: true trong @codemirror/lang-javascript), người dùng có thể thấy ngay interface được tạo, sửa đổi đầu vào và quan sát thay đổi đầu ra. Phản hồi thời gian thực này cải thiện đáng kể hiệu quả thiết kế kiểu, đặc biệt khi thử và sai nhanh.

Tự sửa lỗi JSON nâng cao độ mạnh mẽ của công cụ. Trong thực tế, JSON mà người dùng nhập thường có dấu phẩy ở cuối, dấu nháy đơn, thiếu dấu ngoặc kép, chú thích và các vấn đề nhỏ khác. Hàm tryFixJSON tích hợp sẽ tự động thử sửa các lỗi phổ biến khi JSON.parse thất bại, thông báo cho người dùng nếu sửa thành công; nếu vẫn không thể phân tích, vị trí và lý do lỗi cụ thể sẽ hiển thị ở bên phải, hướng dẫn người dùng sửa. Thiết kế này nâng cao tính thiết thực của công cụ lên một bậc, loại bỏ nhu cầu điều chỉnh thủ công lặp đi lặp lại do lỗi nhỏ.

Xử lý thuần túy frontend là kiến trúc cốt lõi của công cụ này. Tất cả phân tích cú pháp JSON, suy luận kiểu, tạo interface được thực thi trong JavaScript trình duyệt, không gửi bất kỳ dữ liệu nào đến bất kỳ máy chủ nào. Thiết kế này có hai lợi ích cốt lõi: thứ nhất, nội dung JSON có thể bao gồm thông tin nhạy cảm của người dùng (khóa API, token, dữ liệu người dùng), xử lý cục bộ loại bỏ hoàn toàn rủi ro rò rỉ; thứ hai, tốc độ chuyển đổi chỉ bị giới hạn bởi CPU của thiết bị, JSON dưới 1MB được chuyển đổi gần như tức thì, không cần chờ khứ hồi mạng. So với một số dịch vụ trực tuyến yêu cầu đăng ký và đăng nhập, điều này cung cấp khả năng bảo vệ quyền riêng tư và hiệu suất tốt hơn.

Trường hợp sử dụng

  • Khi phát triển frontend, chuyển đổi nhanh phản hồi JSON từ REST API hoặc GraphQL sang interface TS, tránh phải viết định nghĩa kiểu thủ công.
  • Khi các dự án React/Vue/Angular cần khai báo kiểu cho Props, State, tham số thành phần, tạo trong vài giây từ JSON mẫu.
  • Trong các dự án TypeScript full-stack, khi frontend và backend chia sẻ định nghĩa kiểu, mock JSON của backend có thể đóng vai trò là nguồn kiểu cho frontend.
  • Khi tích hợp với API bên thứ ba (vận chuyển, thời tiết, thanh toán, v.v.), nhanh chóng tạo các interface TypeScript tương ứng, tránh phải xem qua tài liệu.
  • Suy luận ngược định nghĩa kiểu từ mock data, test fixture, tệp cấu hình JSON để tăng cường an toàn kiểu và gợi ý IDE.
  • Chuyển đổi JSON Schema được xuất từ ORM cơ sở dữ liệu sang interface TypeScript để tích hợp vào định nghĩa DTO backend Node.js.
  • Khi học TypeScript, chuyển đổi JSON hiện có thành ví dụ interface để hiểu cú pháp của kiểu lồng nhau, kiểu hợp nhất, trường tùy chọn.
  • Khi tái cấu trúc mã, chuyển đổi các object literal JS rải rác thành interface chính thức, cải thiện khả năng đọc mã và an toàn kiểu.

Cách Sử dụng

  1. Dán nội dung JSON vào ô nhập bên trái, hoặc nhấp nút "Tải lên" để chọn tệp .json/.txt, hoặc nhấp "Mẫu" để tải mẫu tích hợp.
  2. Nhấp nút tên interface ở bên phải thanh công cụ (hoặc biểu tượng bánh răng), tùy chỉnh tên interface gốc (mặc định Root), bật trường tùy chọn/readonly.
  3. Công cụ sẽ tự động chuyển đổi (debounce 400ms sau khi nhập); xem mã interface TypeScript được tạo ở bên phải, tô sáng CodeMirror giúp dễ đọc.
  4. Chọn kiểu thụt lề (2 hoặc 4 dấu cách), điều chỉnh độ rộng bảng bên trái/phải của thanh công cụ để có trải nghiệm xem tối ưu.
  5. Nhấp "Sao chép" để sao chép mã TS vào bộ nhớ tạm, hoặc "Tải xuống" để lưu dưới dạng tệp `${interfaceName}.ts` (ví dụ: User.ts).
  6. Dán mã vào thư mục `types/` hoặc `src/types/` của dự án, sử dụng thông qua import khi cần.

Tính năng

  • Suy luận kiểu thông minh: tự động nhận dạng các kiểu null, boolean, number, string, array, object, v.v. và ánh xạ sang cú pháp TS gốc.
  • Tự động mở rộng đối tượng lồng nhau: tự động tạo các interface con độc lập cho các đối tượng lồng nhau (ví dụ: RootAddress), giữ cho hệ thống phân cấp kiểu rõ ràng và tránh dư thừa.
  • Xử lý thông minh kiểu mảng: tạo `T[]` cho các phần tử cùng kiểu, mảng hợp nhất `(A | B)[]` cho kiểu hỗn hợp, `any[]` dự phòng cho mảng trống.
  • Đánh dấu trường tùy chọn: khi bật, tự động phát hiện các trường null/undefined, thêm công cụ sửa đổi `?`, tạo mã tuân thủ chế độ TypeScript strict.
  • Hỗ trợ trường readonly: khi bật, thêm công cụ sửa đổi `readonly` cho tất cả các trường, phù hợp cho trạng thái bất biến, cấu hình, DTO, v.v.
  • Tùy chỉnh tên interface: tên interface gốc có thể cấu hình (mặc định Root), tên tệp tải xuống cũng sử dụng tên này (ví dụ: User.ts).
  • Thụt lề 2/4 dấu cách có thể chọn: chuyển đổi một cú nhấp trên thanh công cụ giữa kiểu 2 dấu cách (mặc định ESLint) và 4 dấu cách.
  • Chuyển đổi tự động thời gian thực: sau 400ms kể từ khi nhập JSON, debounde và chuyển đổi tự động, không cần nhấp nút; hỗ trợ dán, tải tệp lên, mẫu - ba cách nhập.
  • Tự sửa lỗi JSON: hàm sửa lỗi tryFixJSON tích hợp, tự động xử lý dấu phẩy ở cuối, dấu nháy đơn, thiếu dấu ngoặc kép và các lỗi cú pháp phổ biến khác.
  • Tô sáng mã TypeScript: đầu ra bên phải sử dụng tô sáng CodeMirror + JavaScript (TypeScript), dễ đọc.
  • Sao chép và tải xuống: một cú nhấp để sao chép vào bộ nhớ tạm hoặc tải xuống tệp .ts chuẩn để sử dụng trực tiếp trong các dự án frontend.
  • Xử lý hoàn toàn cục bộ trong trình duyệt: tất cả phân tích cú pháp JSON, suy luận kiểu, tạo interface đều được thực hiện trong JavaScript trình duyệt, dữ liệu gốc không được tải lên.

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

Làm thế nào để chuyển đổi JSON sang interface TypeScript?

Dán nội dung JSON vào ô nhập bên trái, công cụ sẽ tự động suy luận kiểu của mỗi trường (string, number, boolean, array, object, v.v.) và tạo định nghĩa interface TypeScript chuẩn. Các đối tượng lồng nhau sẽ tự động tạo các interface con, giữ cho hệ thống phân cấp kiểu rõ ràng. Chuyển đổi tự động xảy ra sau 400ms kể từ khi nhập, không cần nhấp chuột.

Có hỗ trợ tạo type alias hay interface?

Công cụ này chỉ tạo khai báo interface TypeScript (không hỗ trợ type alias). interface là cách chuẩn để mô tả kiểu đối tượng trong TypeScript, hỗ trợ hợp nhất khai báo (declaration merging) và từ khóa implements, được ưa chuộng trong các dự án frontend React, Vue, Angular.

Làm thế nào để đánh dấu trường tùy chọn?

Khi bật "Trường tùy chọn (?)" trong cài đặt, công cụ sẽ tự động phát hiện các trường có giá trị null hoặc undefined và thêm công cụ sửa đổi `?` vào interface. Ví dụ: `name?: string` có nghĩa là trường đó có thể bị bỏ qua. Mã được tạo tuân thủ đặc tả chế độ nghiêm ngặt TypeScript strict.

Làm thế nào để tạo trường readonly?

Khi bật "Trường readonly" trong cài đặt, tất cả các trường sẽ tự động nhận công cụ sửa đổi `readonly`, ví dụ: `readonly id: number`. Interface được tạo nhấn mạnh tính bất biến, phù hợp để định nghĩa cấu hình, ảnh chụp nhanh trạng thái hoặc DTO.

Các kiểu mảng được xử lý như thế nào?

Công cụ phân tích kiểu của các phần tử mảng. Nếu tất cả các phần tử cùng kiểu, tạo dạng `T[]` (ví dụ: `string[]`); nếu các kiểu khác nhau, tạo mảng hợp nhất `(A | B)[]` (ví dụ: `(string | number)[]`); nếu mảng trống, tạo `any[]` dự phòng.

Các đối tượng lồng nhau có tạo nhiều interface không?

Có. Mỗi đối tượng lồng nhau tạo một interface con độc lập, quy tắc đặt tên: "tên interface cha + chữ cái đầu của tên trường viết hoa". Ví dụ: nếu Root chứa đối tượng address, cả hai interface Root và RootAddress sẽ được tạo. Các interface con tự động tham chiếu lẫn nhau, tránh trùng lặp định nghĩa kiểu.

Có thể tùy chỉnh tên interface không?

Có. Nhấp vào nút tên interface ở bên phải thanh công cụ (hoặc trong cài đặt), bạn có thể tùy chỉnh tên interface gốc (mặc định Root). Tệp .ts được tải xuống cũng sẽ được đặt tên theo tên này (ví dụ: `User.ts`). Tên của các interface con được tạo tự động dựa trên tên gốc.

Tệp .ts đã tải xuống có thể sử dụng trực tiếp trong dự án không?

Có. Mã được tạo tuân thủ các tiêu chuẩn mã hóa TypeScript, chứa đầy đủ định nghĩa kiểu, interface lồng nhau, suy luận kiểu hợp nhất, v.v., có thể được sao chép trực tiếp vào các dự án React, Vue, Angular hoặc Node.js. Tên tệp tải xuống là `${interfaceName}.ts`, ví dụ: User.ts.

Phải làm gì nếu phân tích cú pháp JSON thất bại?

Nếu JSON có các lỗi phổ biến như dấu phẩy ở cuối, thiếu dấu ngoặc kép, thay dấu nháy đơn bằng dấu nháy kép, công cụ sẽ tự động gọi tryFixJSON để thử sửa. Nếu sửa thành công, người dùng sẽ được thông báo; nếu không thể sửa, vị trí và lý do lỗi cụ thể sẽ hiển thị ở bên phải. Bạn có thể định dạng lại với thụt lề 2/4 dấu cách và thử lại.

Các cấu trúc dữ liệu JSON nào được hỗ trợ?

Hỗ trợ tất cả các cấu trúc dữ liệu JSON hợp lệ: kiểu cơ bản (null, boolean, number, string), mảng (một hoặc nhiều chiều), đối tượng lồng nhau (độ sâu bất kỳ), mảng kiểu hỗn hợp (tạo kiểu hợp nhất). Đầu vào không được hỗ trợ: JSON chứa hàm, Symbol, undefined và các giá trị đặc biệt khác của JavaScript (đây không phải là JSON hợp lệ).

Có thể chọn số dấu cách thụt lề không?

Có. Có một danh sách thả xuống cài đặt thụt lề ở bên phải thanh công cụ, hỗ trợ hai kiểu 2 và 4 dấu cách. 2 dấu cách là kiểu mặc định của ESLint/Prettier, 4 dấu cách phù hợp cho các dự án yêu cầu thụt lề lỏng hơn. Mã được tạo duy trì thụt lề nhất quán để dễ đọc và bảo trì.

Khác với JSON Schema, Zod và các thư viện kiểu khác như thế nào?

JSON Schema phù hợp để xác thực dữ liệu thời gian chạy (ranh giới API, xác thực đầu vào người dùng); Zod/yup là các thư viện xác thực thời gian chạy thân thiện với TypeScript, có thể tạo kiểu TS từ schema; công cụ của chúng tôi là một trình tạo định nghĩa kiểu thuần túy nhẹ, không thực hiện xác thực thời gian chạy, tập trung vào các tình huống định nghĩa kiểu tĩnh frontend, nhanh hơn và không phụ thuộc.

Xử lý sự cố

Phải làm gì nếu interface được tạo không chính xác?

Nguyên nhân phổ biến: phân tích cú pháp JSON thất bại, lỗi nhận dạng đối tượng lồng nhau, lỗi suy luận kiểu mảng. Giải pháp: 1) Kiểm tra JSON có hợp lệ không (sử dụng công cụ định dạng JSON); 2) Đối với đối tượng lồng nhau, xác nhận quan hệ tham chiếu interface con; 3) Đối với mảng, xác nhận kiểu phần tử có nhất quán không; 4) Tạo lại hoặc tinh chỉnh mã được tạo thủ công. Interface được tạo là bản nháp, cần điều chỉnh chi tiết theo API thực tế của dự án.

Tệp .ts đã tải xuống gây lỗi biên dịch trong dự án?

Nguyên nhân có thể: 1) tsconfig.json chưa bật chế độ strict nhưng đã tạo trường readonly; 2) Tên interface xung đột với các kiểu khác trong dự án; 3) Tên trường là từ khóa TypeScript (ví dụ: `class`, `type`). Giải pháp: điều chỉnh cài đặt strict của tsconfig, sửa đổi tên interface, thêm dấu ngoặc kép thoát cho trường xung đột (ví dụ: `"class": string`).

JSON chứa mảng lồng nhau, suy luận kiểu không đúng?

Công cụ này xử lý đệ quy các mảng nhiều chiều (ví dụ: `[[1, 2], [3, 4]]`), cuối cùng tạo `number[][]`. Nếu kiểu phần tử của mảng lồng nhau không nhất quán, công cụ sẽ tạo dạng `((A | B)[])[]`. Mảng trống luôn tạo `any[]`, vì kiểu phần tử không thể suy luận được.

Giá trị null được ánh xạ thành kiểu `null` thay vì trường tùy chọn?

Theo mặc định, công cụ ánh xạ giá trị null trong JSON sang kiểu `null` của TS (ví dụ: `middleName: null`). Nếu bạn muốn tạo trường tùy chọn (`middleName?: string`), bạn cần: 1) Bật tùy chọn "Trường tùy chọn" (khuyến nghị); 2) Hoặc thay đổi giá trị null trong JSON thành trường bị thiếu; 3) Hoặc sau khi tạo, thay đổi thủ công `null` thành `string | null` hoặc `?`.

Tên interface và tên tệp tải xuống không khớp?

Trong công cụ, cả hai đều là cùng một giá trị, được kiểm soát bởi cài đặt "tên interface" (mặc định Root). Tên tệp tải xuống là `${interfaceName}.ts`. Nếu chúng có vẻ không nhất quán, hãy kiểm tra xem có nhiều tab đang mở gây mất đồng bộ cài đặt không. Nên tạo lại sau khi sửa đổi cài đặt.

Mã được tạo có nhiều kiểu `any`?

Nguyên nhân có thể: 1) JSON chứa các kiểu không nhận dạng được (thực tế là object nhưng phân tích lỗi); 2) Mảng trống dẫn đến dự phòng any[]; 3) Giá trị trường là null và tùy chọn trường tùy chọn chưa bật. Giải pháp: kiểm tra tính toàn vẹn của dữ liệu JSON, thêm dữ liệu mẫu để công cụ suy luận chính xác hơn, chỉ định kiểu thủ công cho các mảng luôn trống (ví dụ: `User[]`).

Muốn hợp nhất interface được tạo với các kiểu hiện có?

TypeScript interface hỗ trợ hợp nhất khai báo (declaration merging), các interface cùng tên tự động hợp nhất các thuộc tính. Chỉ cần tạo một interface cùng tên trong dự án và export, sau đó hợp nhất: ví dụ công cụ tạo `export interface User { id: number }`, bạn viết `export interface User { name: string }` trong dự án, cả hai sẽ tự động hợp nhất thành `{ id: number; name: string }`.

Thuật ngữ

JSON (JavaScript Object Notation)
Định dạng trao đổi dữ liệu nhẹ, dựa trên cú pháp đối tượng JavaScript nhưng độc lập với ngôn ngữ lập trình. Hỗ trợ 6 kiểu cơ bản: đối tượng ({}), mảng ([]), chuỗi, số, boolean, null. Được sử dụng rộng rãi trong REST API, truyền dữ liệu frontend-backend, tệp cấu hình, nhật ký, v.v.
TypeScript
Tập cha của JavaScript được Microsoft phát triển, bổ sung cho JavaScript các tính năng như định nghĩa kiểu tĩnh, interface, generic. Mã TypeScript được biên dịch thành JavaScript thuần để chạy trong trình duyệt hoặc Node.js. Là ngôn ngữ được ưa chuộng cho các dự án frontend hiện đại React, Vue, Angular.
interface (giao diện)
Từ khóa TypeScript để mô tả kiểu đối tượng, cú pháp: `interface Name { prop: type; }`. Hỗ trợ hợp nhất khai báo (các interface cùng tên tự động hợp nhất), implements (lớp triển khai interface), extends (kế thừa interface). Là cách chính để mô tả hình dạng đối tượng trong TypeScript.
type alias
Từ khóa TypeScript để đặt bí danh cho kiểu, cú pháp: `type Name = ...`. Có thể được sử dụng để định nghĩa kiểu hợp nhất (`A | B`), kiểu giao (`A & B`), kiểu hàm, v.v. Linh hoạt hơn interface nhưng không hỗ trợ hợp nhất khai báo. Công cụ này sử dụng interface chứ không phải type.
Suy luận kiểu (Type Inference)
Quá trình công cụ này tự động xác định kiểu TS tương ứng dựa trên typeof và hình thức cụ thể của value JSON. Ví dụ: typeof string ánh xạ thành string, khi Array.isArray() trúng, xử lý như mảng, khi typeof object trúng, tạo interface con độc lập.
Trường tùy chọn (?)
Công cụ sửa đổi TypeScript chỉ ra rằng trường có thể bị bỏ qua. `name?: string` có nghĩa là trường name có thể không tồn tại (giá trị undefined). Khi bật tùy chọn "Trường tùy chọn" của công cụ, các trường có giá trị null hoặc undefined sẽ tự động nhận `?`.
Trường readonly (readonly)
Công cụ sửa đổi TypeScript chỉ ra rằng trường là bất biến. `readonly id: number` có nghĩa là trường id không thể được gán lại sau khi đối tượng được tạo. Khi bật tùy chọn "Trường readonly" của công cụ, tất cả các trường sẽ tự động nhận `readonly`.
Kiểu hợp nhất (Union Type)
Cú pháp TypeScript chỉ ra rằng giá trị có thể là một trong nhiều kiểu, được viết là `A | B`. Công cụ sử dụng nó khi kiểu phần tử mảng không nhất quán, ví dụ `(string | number)[]` có nghĩa là phần tử mảng có thể là string hoặc number.
Kiểu mảng (Array Type)
Cú pháp TypeScript cho mảng, có hai dạng: dạng generic `Array<T>` và dạng viết tắt `T[]`. Công cụ sử dụng nhất quán dạng viết tắt. Công cụ có ba chế độ tạo kiểu mảng: kiểu đồng nhất `T[]`, kiểu hỗn hợp `(A | B)[]`, mảng trống `any[]`.
Interface lồng nhau (Nested Interface)
Tham chiếu các interface khác trong một interface để tạo thành hệ thống phân cấp kiểu. Công cụ tạo interface con độc lập cho mỗi đối tượng lồng nhau, interface chính tham chiếu thông qua tên thuộc tính. Ví dụ: Root tham chiếu RootAddress, RootAddress có thể được tham chiếu độc lập bởi các kiểu khác.
Chế độ TypeScript strict
Chế độ nghiêm ngặt của trình biên dịch TypeScript, bao gồm một số tùy chọn phụ: noImplicitAny, strictNullChecks, strictFunctionTypes, v.v. Khi bật strictNullChecks, null và undefined là các kiểu độc lập và không thể gán cho biến kiểu khác. Các trường tùy chọn được tạo bởi công cụ này hoàn toàn tương thích với chế độ strict.
DTO (Data Transfer Object)
Đối tượng truyền dữ liệu, được sử dụng để truyền dữ liệu giữa các lớp khác nhau (ví dụ: lớp API và Service). Trong các dự án TypeScript thường được mô tả bằng interface, kết hợp với readonly để nhấn mạnh tính bất biến. Công cụ này là công cụ phổ biến để tạo định nghĩa kiểu DTO.
Hợp nhất khai báo (Declaration Merging)
Tính năng của interface TypeScript: các interface cùng tên tự động hợp nhất các thuộc tính. Thường được sử dụng để mở rộng định nghĩa kiểu của thư viện bên thứ ba. Các interface được tạo bởi công cụ này có thể được hợp nhất với các interface cùng tên khác trong dự án, tạo điều kiện cho việc mở rộng kiểu từng bước.
tsconfig.json
Tệp cấu hình dự án TypeScript, nằm trong thư mục gốc của dự án. Chứa compilerOptions (target, module, strict, v.v.), include, exclude và các cài đặt khác. Các tệp .ts được tạo bởi công cụ này có thể được sử dụng trong bất kỳ dự án tsconfig chuẩn nào.
tryFixJSON
Hàm sửa lỗi JSON tích hợp của công cụ này, tự động xử lý dấu phẩy ở cuối, dấu nháy đơn thay cho dấu nháy kép, thiếu dấu ngoặc kép trong key, chú thích và các lỗi cú pháp JSON phổ biến khác. Được gọi tự động khi JSON.parse thất bại, thông báo cho người dùng sau khi sửa thành công và tiếp tục chuyển đổi.

Quy tắc ánh xạ từ kiểu JSON sang kiểu TypeScript

Các quy tắc đầy đủ mà hàm getTsType của công cụ chúng tôi suy luận kiểu TypeScript dựa trên hình thức của value JSON:

Giá trị JSONVí dụKiểu TypeScriptQuy tắc xác định
nullnullnullJSON null ánh xạ trực tiếp sang kiểu TS null
undefinedundefinedundefinedGiá trị undefined ánh xạ sang TS undefined (chỉ tồn tại thời gian chạy)
booleantrue / falsebooleantypeof boolean ánh xạ sang TS boolean
integer1, 100, -9999numberSố nguyên và số thực đều ánh xạ sang TS number
float3.14, -0.5, 1e10numberTất cả chữ số ánh xạ sang number (TS không phân biệt int và float)
string"Alice", "Hà Nội"stringtypeof string ánh xạ sang TS string
empty array[]any[]Mảng trống không thể suy luận kiểu phần tử, dự phòng any[]
homogeneous array[1, 2, 3]T[] (vd: number[])Phần tử cùng kiểu tạo kiểu mảng đơn lẻ
mixed array[1, "a"](A | B)[] (vd: (number | string)[])Phần tử khác kiểu tạo kiểu mảng hợp nhất
object{a: 1, b: "x"}SubInterface (vd: Root)Đối tượng lồng nhau tạo interface con độc lập và tham chiếu

So sánh interface vs type alias

Lý do công cụ này tạo interface thay vì type alias, và sự khác biệt giữa chúng trong các dự án TypeScript:

Chiều khả nănginterfacetype aliasGhi chú
Mô tả kiểu đối tượng✓ (ưu tiên)✓ (cũng hỗ trợ)Cả hai đều hỗ trợ, công cụ tạo interface
Hợp nhất khai báo✓ (cùng tên tự động hợp nhất)✗ (khai báo trùng lặp gây lỗi)interface hỗ trợ mở rộng từng bước, type thì không
implements/extends✓ (lớp có thể implements)△ (chỉ type đối tượng mới có thể implements)interface tự nhiên hơn trong các tình huống OOP
Kiểu hợp nhất (A | B)type ngắn gọn hơn cho kiểu hợp nhất
Kiểu giao (A & B)type ngắn gọn hơn cho kiểu giao
Kiểu hàm△ (cần call signature)✓ (định nghĩa trực tiếp)type trực quan hơn cho kiểu hàm
Hiệu suất (nhiều kiểu)Nhanh hơn một chútChậm hơn một chútinterface nhanh hơn với hợp nhất gia tăng khi biên dịch
Lựa chọn của công cụ✓ Sử dụng nhất quánCông cụ tập trung vào kiểu đối tượng, interface là lựa chọn tối ưu

Quy tắc tạo trường tùy chọn và readonly

Tác động của hai tùy chọn chuyển đổi của công cụ này lên mã được tạo và các tình huống sử dụng tối ưu:

Tùy chọnĐiều kiện kích hoạtCú pháp được tạoTình huống sử dụng tối ưu
Trường tùy chọn (?): tắt(mặc định)name: stringTất cả trường bắt buộc, kiểu nghiêm ngặt
Trường tùy chọn (?): bậtvalue === null || value === undefinedname?: stringTrường tùy chọn, dữ liệu có thể bỏ qua
Trường readonly (readonly): tắt(mặc định)name: stringKiểu chung, trường có thể ghi
Trường readonly (readonly): bậtTất cả trường được xử lý nhất quánreadonly name: stringTrạng thái bất biến, cấu hình, DTO, phản hồi API
Cả hai đều bậtCả hai điều kiện đều thỏa mãnreadonly name?: stringẢnh chụp nhanh phản hồi API, cấu hình tùy chọn

Privacy & Security

Mọi thao tác của công cụ JSON sang TypeScript này được thực hiện hoàn toàn cục bộ trong trình duyệt của bạn: phân tích cú pháp JSON, suy luận kiểu, tạo interface đều được thực thi bởi JavaScript trình duyệt ở phía máy khách, không gửi nội dung JSON, tệp đã tải lên hoặc mã được tạo đến bất kỳ máy chủ nào qua mạng. Tải tệp sử dụng API FileReader gốc của trình duyệt để đọc trực tiếp vào bộ nhớ, không thông qua dịch vụ trung gian nào. Không sử dụng theo dõi Cookie, không thu thập bất kỳ dữ liệu đầu vào hoặc dữ liệu sử dụng nào của người dùng. Sau khi đóng hoặc làm mới trang, tất cả nội dung đầu vào và đầu ra sẽ tự động được xóa khỏi bộ nhớ. Phù hợp để xử lý JSON chứa khóa API, token, dữ liệu kinh doanh nhạy cảm.

Authoritative References