ToolDeck

JSON เป็น TypeScript

สร้าง TypeScript interfaces จาก JSON

ลองตัวอย่าง
ชื่อ root interface:

อินพุต JSON

เอาต์พุต TypeScript

ประมวลผลในเครื่อง · ปลอดภัยในการวางข้อมูลลับ
TypeScript interfaces จะแสดงที่นี่…

การแปลง JSON เป็น TypeScript คืออะไร?

วาง JSON payload แล้วรับ TypeScript interfaces กลับมา — สัญญาประเภทที่อธิบายอย่างชัดเจนว่า object มี properties อะไรบ้างและแต่ละ property มีประเภทใด หากไม่มี interfaces ข้อมูลจาก JSON.parse() จะมาเป็น any ทำให้ editor ช่วยเหลือไม่ได้ และ compiler ไม่ตรวจสอบการเข้าถึงหรือกำหนด property การแปลง JSON เป็น TypeScript ให้ความปลอดภัยนั้นโดยไม่ต้องเขียน interfaces เอง

TypeScript รองรับค่า JSON ทั้งหกประเภท ได้แก่ string, number, boolean, null, object และ array JSON object ที่ซ้อนกันทุกชั้นจะกลายเป็น named interface ของตัวเอง Arrays ได้รับประเภทจาก element แรก ผลลัพธ์ตรงกับสิ่งที่ JSON.parse() คืนมาจริงๆ ดังนั้น interfaces จึงสะท้อนข้อมูลจริงแทนที่จะเป็นการคาดเดา

การเขียน interfaces ด้วยมือสำหรับ JSON ขนาดใหญ่หรือซ้อนกันลึกนั้นน่าเบื่อและเกิดข้อผิดพลาดได้ง่าย เครื่องมือสร้าง TypeScript จาก JSON อ่านโครงสร้างโดยอัตโนมัติ จัดการ nesting แบบ recursive และสร้างโค้ด interface ที่เรียบร้อยภายในไม่กี่วินาที มีประโยชน์เป็นพิเศษเมื่อต่อ API ที่ไม่คุ้นเคย ทดลองใช้งานกับ mock data หรือย้าย JavaScript codebase มาเป็น TypeScript และช่วยให้คุณไม่ต้องติดตาม property names และประเภทที่ซ้อนกันด้วยมือ เพื่อให้คุณโฟกัสกับ application logic แทน type boilerplate

ทำไมต้องใช้เครื่องมือสร้าง TypeScript จาก JSON?

การสร้าง TypeScript interfaces ด้วยมือทำได้กับ objects ขนาดเล็ก แต่จะยากขึ้นอย่างรวดเร็วเมื่อโครงสร้างซ้อนกันหรือ API responses มีขนาดใหญ่ ลองนึกถึง API response ที่มี 50 fields และ nesting สามระดับ — การเขียนด้วยมือหมายถึง interfaces หลายสิบชุด ซึ่งแต่ละชุดอาจมีการพิมพ์ผิดหรือขาด nullable fields เครื่องมือที่ทำงานอัตโนมัติสร้างชุดทั้งหมดใน milliseconds และลดโอกาสที่ประเภทจะไม่ตรงกันระหว่างโค้ดและข้อมูลที่ใช้งาน นอกจากความแม่นยำแล้ว ยังช่วยให้ types ของคุณสอดคล้องกับ API contract จริง เมื่อ service เปลี่ยน response shape เพียงวาง JSON ที่อัปเดตแล้ว regenerate — เร็วกว่าการตามหาทุก property ที่เปลี่ยนแปลงใน interface file ที่เขียนด้วยมือมาก

สร้าง interfaces ทันที
วาง JSON payload ใดก็ได้และรับ interfaces ที่กำหนดประเภทถูกต้องใน milliseconds ไม่ต้องกำหนดค่า ไม่ต้องมี build step
🔒
ข้อมูลของคุณเป็นส่วนตัว
การแปลงทั้งหมดทำงานในเบราว์เซอร์ JSON ของคุณไม่ออกจากเครื่อง ซึ่งสำคัญเมื่อทำงานกับข้อมูล production หรือ API responses ภายใน
📋
รองรับโครงสร้างซ้อนกันอัตโนมัติ
Objects ที่ซ้อนกันสร้าง named interfaces แยกกัน Arrays, nullable fields และประเภทผสมถูกประมวลผลทั้งหมดโดยไม่ต้องแก้ไขด้วยมือ
🌐
ไม่ต้องสร้างบัญชีหรือติดตั้ง
ทำงานในเบราว์เซอร์สมัยใหม่ทุกตัว ไม่มี npm packages ที่ต้องติดตั้ง ไม่มี CLI tools ที่ต้องกำหนดค่า ไม่มีฟอร์มสมัครสมาชิก

กรณีใช้งาน JSON เป็น TypeScript

การเชื่อมต่อ API สำหรับ Frontend
วาง REST หรือ GraphQL JSON response เพื่อสร้าง interfaces สำหรับ React, Angular หรือ Vue components Props และ state ที่ type-safe ป้องกันความผิดพลาดที่ runtime คุณยังแชร์ interfaces ที่สร้างขึ้นระหว่าง frontend และ backend ใน monorepo ได้ เพื่อให้ทั้งสองฝั่งเห็นตรงกันเรื่อง data shape
การกำหนดประเภท Response สำหรับ Backend
บริการ Node.js และ Deno ที่ใช้ third-party APIs ได้ประโยชน์จาก interfaces ที่สร้างขึ้น กำหนด contract ครั้งเดียว ตรวจจับ shape mismatches ที่ compile time Interfaces ที่สร้างขึ้นยังเป็นเอกสารแบบ lightweight สำหรับผู้ใช้บริการ ลดความจำเป็นในการมี schema files หรือหน้า wiki แยกต่างหาก
ไฟล์กำหนดค่า DevOps
เครื่องมือ infrastructure อย่าง AWS CDK หรือ Pulumi ใช้ JSON configs สร้าง TypeScript types สำหรับ configs เหล่านั้นเพื่อตรวจสอบก่อน deploy ช่วยตรวจจับการ deploy ที่กำหนดค่าผิดพลาดจากการพิมพ์ผิดหรือประเภทค่าที่ไม่ถูกต้องก่อนโค้ดถึง production
ข้อมูล Test Fixtures สำหรับ QA
สร้าง interfaces จาก JSON test fixtures เพื่อให้ assertions ตรงกับ data shape ที่คาดหวัง ตรวจจับ fields ที่ขาดหรือเปลี่ยนชื่อก่อน tests ทำงาน
สัญญา Data Pipeline
เมื่อ pipeline สร้าง JSON output interfaces ที่สร้างขึ้นทำหน้าที่เป็น schema สำหรับผู้ใช้ downstream การเปลี่ยน output shape จะเกิด compile-time errors
การเรียนรู้ TypeScript
นักศึกษาและนักพัฒนาที่เพิ่งเริ่มใช้ TypeScript สามารถวาง JSON structures ที่คุ้นเคยและดูว่า interfaces แมปกับข้อมูลอย่างไร เชื่อมช่องว่างระหว่าง dynamic typing และ static typing

ตารางอ้างอิงการแมปประเภท JSON เป็น TypeScript

ค่า JSON ทุกค่าแมปกับประเภท TypeScript ตารางด้านล่างแสดงวิธีที่ JSON primitive และประเภทโครงสร้างแต่ละอย่างแปลงออกมา การแมปนี้เป็นไปตามมาตรฐาน ECMA-404 JSON และ built-in types ของ TypeScript

ประเภท JSONตัวอย่างค่าประเภท TypeScript
string"hello"string
number42, 3.14number
booleantrue, falseboolean
nullnullnull
object{"key": "value"} nested interface
array[1, 2, 3]number[] (inferred from first element)

TypeScript interface กับ type Alias

TypeScript มีสองวิธีในการอธิบาย object shapes ได้แก่ interface declarations และ type aliases ทั้งสองใช้แสดงโครงสร้าง JSON ได้ แต่แตกต่างกันในพฤติกรรมการขยายและการรวม เครื่องมือส่วนใหญ่ที่แปลง JSON เป็น TypeScript สร้าง interfaces เพราะเป็นตัวเลือกมาตรฐานสำหรับ object shapes ใน TypeScript

interface
รองรับ declaration merging และ extends syntax เหมาะสำหรับ object shapes โดยเฉพาะใน public APIs และ libraries สามารถขยายโดย interfaces อื่นหรือตัด intersection กับ types ได้
type
รองรับ union types, intersection types และ mapped types เหมาะกว่าสำหรับ computed types, discriminated unions หรือเมื่อต้องการ alias ให้ primitive ไม่สามารถเปิดใหม่สำหรับ declaration merging ได้

ตัวอย่างโค้ด

ด้านล่างคือตัวอย่างการสร้าง TypeScript interfaces จาก JSON ในภาษาและเครื่องมือต่างๆ แต่ละ snippet สร้างผลลัพธ์ที่ใช้งานได้จริง

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;
# }

คำถามที่พบบ่อย

การแปลง JSON เป็น TypeScript จัดการ optional fields อย่างไร?
หากค่า JSON เป็น null เครื่องมือจะทำเครื่องหมาย property เป็น optional ด้วย ? suffix และกำหนดประเภท null หากต้องการแยกความแตกต่างระหว่าง keys ที่ขาดหายไปกับค่า null คุณสามารถปรับผลลัพธ์ด้วยตนเองเพื่อใช้ undefined สำหรับ properties ที่ขาดหายไป
แปลง JSON arrays เป็น TypeScript ได้ไหม?
ได้ หาก JSON root ของคุณเป็น array เครื่องมือจะตรวจสอบ element แรกเพื่ออนุมาน item type และสร้าง interface สำหรับ element นั้น ประเภท root จะกลายเป็น interface นั้นตามด้วย [] Arrays ว่างเปล่าสร้าง unknown[] เนื่องจากไม่มี element ให้ตรวจสอบ
เกิดอะไรขึ้นกับ JSON objects ที่ซ้อนกันลึก?
แต่ละ object ที่ซ้อนกันสร้าง named interface แยกกัน ชื่อนำมาจาก property key ที่แปลงเป็น PascalCase เช่น property ที่ชื่อ "shipping_address" สร้าง interface ชื่อ ShippingAddress ทำให้ผลลัพธ์อ่านได้ง่ายแม้ JSON จะซ้อนกันสี่หรือห้าระดับ หาก objects ที่ซ้อนกันหลายชิ้นมีโครงสร้างเหมือนกัน คุณอาจต้องรวมเป็น shared interface เดียวด้วยตนเองเพื่อลดการซ้ำซ้อนใน codebase
json2ts กับ quicktype ต่างกันอย่างไร?
json2ts เป็น converter ที่เรียบง่ายซึ่งแมปค่า JSON เป็น TypeScript interfaces โดยตรง quicktype ไปไกลกว่าด้วยการวิเคราะห์ JSON samples หลายชุด กำจัด shapes ที่ซ้ำกัน และรองรับผลลัพธ์กว่า 20 ภาษา สำหรับการแปลงครั้งเดียว เครื่องมือในเบราว์เซอร์เร็วกว่า สำหรับ CI pipelines หรือ multi-language codegen quicktype เหมาะกว่า
ทำไมต้องใช้ interfaces แทน type aliases สำหรับ JSON?
Interfaces รองรับ declaration merging หมายความว่าคุณสามารถขยาย interface ที่สร้างขึ้นในไฟล์แยกต่างหากโดยไม่แก้ไขต้นฉบับ Interfaces ยังให้ error messages ที่ชัดเจนกว่าในส่วน editors ส่วนใหญ่ Type aliases ดีกว่าเมื่อต้องการ union types หรือ mapped types แต่สำหรับ JSON object shapes ทั่วไป interfaces คือตัวเลือกมาตรฐาน หากคุณกำลังเขียน library หรือ SDK interfaces แทบจะเป็นตัวเลือกที่ถูกต้องเสมอ เพราะผู้ใช้ downstream สามารถขยายได้ด้วย declaration merging โดยไม่แตะโค้ดต้นฉบับ
เครื่องมือนี้รองรับ JSON ที่มีประเภทไม่สอดคล้องกันใน arrays ได้ไหม?
เครื่องมืออนุมาน array element type จาก element แรกที่ไม่ใช่ null หาก array ของคุณมีประเภทผสม เช่น objects ผสมกับ strings ผลลัพธ์จะสะท้อนเฉพาะ shape ของ element แรก สำหรับ arrays ที่มีหลายประเภท คุณต้องกำหนด union array type ด้วยตนเองหลังจากสร้าง เช่น type ที่รับทั้ง Item และ string elements เพื่อแสดง element types ที่เป็นไปได้ทั้งหมดอย่างแม่นยำ
ใช้ interfaces ที่สร้างขึ้นในโปรเจกต์จริงอย่างไร?
คัดลอก interfaces ที่สร้างขึ้นไปใส่ไฟล์ .ts ในโปรเจกต์ของคุณ โดยทั่วไปอยู่ใน types/ หรือ models/ directory นำเข้าที่จุดที่คุณ fetch หรือประมวลผลข้อมูล JSON จับคู่กับ runtime validator อย่าง Zod หรือ io-ts หากต้องการรับประกันว่า API responses ตรงกับ interface ที่ runtime ไม่ใช่แค่ compile time ด้วย Zod คุณสามารถดึง TypeScript type โดยตรงจาก schema โดยใช้ infer utility ซึ่งกำจัดความซ้ำซ้อนระหว่าง interface definition และ validation logic
TypeScript interfaces ที่สร้างขึ้นให้ความปลอดภัยของประเภทที่ runtime หรือไม่?
ไม่ — type system ของ TypeScript ถูกลบออกเมื่อ compile Interfaces มีอยู่เฉพาะใน editor และระหว่าง build เท่านั้น ไม่ใช่ที่ runtime JSON.parse() จะคืนค่า any เสมอโดยไม่คำนึงถึงประเภทที่คุณกำหนดทีหลัง หากต้องการบังคับประเภทที่ runtime ให้จับคู่ interfaces ที่สร้างขึ้นกับ library อย่าง Zod หรือ io-ts Libraries เหล่านี้ตรวจสอบว่า object ที่รับเข้ามาตรงกับ shape ที่คาดหวังก่อนนำไปใช้ ป้องกัน API responses ที่ผิดรูปแบบ fields ที่ขาดหายไป และค่า null ที่ไม่คาดคิด