UTILS.
۱۰۰٪ در مرورگر
📘

تبدیل JSON Schema به TypeScript

یک JSON Schema (draft-07 یا 2020-12) را به interface‌ها و type aliasهای TypeScript کامپایل کنید، با مدیریت required، enumها، ‏$ref، آرایه‌ها و combinatorها.

خروجی

درباره این ابزار

ابزار تبدیل JSON Schema به TypeScript یک سند JSON Schema را به interface‌ها و type aliasهای TypeScript کامپایل می‌کند، و همان کاری را انجام می‌دهد که کتابخانه محبوب json-schema-to-typescript انجام می‌دهد بدون نصب یک زنجیره ابزار. برخلاف مبدل‌های نمونه-JSON، این یکی یک اسکیمای واقعی می‌خواند: شیء اسکیما را پیمایش می‌کند و type:'object' را به یک interface تبدیل می‌کند که در آن کلیدهای فهرست‌شده در required غیراختیاری هستند و بقیه با ? علامت‌گذاری می‌شوند.

همه چیز به‌صورت محلی در مرورگر شما با JSON.parse و JavaScript ساده تجزیه و تولید می‌شود، پس اسکیمای شما هرگز صفحه را ترک نمی‌کند. اسکیماهای رشته‌ای با یک enum به یک اجتماع از literalهای رشته‌ای تبدیل می‌شوند؛ string ساده، number/integer، boolean و null به معادل‌های TypeScript خود نگاشت می‌شوند؛ آرایه‌ها به T[] تبدیل می‌شوند (یک tuple هنگامی که items یک آرایه است). Combinatorها پشتیبانی می‌شوند — allOf به یک اشتراک (A & B) و anyOf / oneOf به اجتماع‌ها (A | B) تبدیل می‌شوند — و یک نوع nullable به‌صورت type:[T,'null'] به T | null تبدیل می‌شود.

ارجاع‌ها با نام حل می‌شوند: یک $ref که به #/definitions/X یا #/$defs/X اشاره می‌کند یک ارجاع نوع نام‌گذاری‌شده تولید می‌کند، و هر تعریف به‌عنوان export interface یا export type خودش تولید می‌شود. additionalProperties یک امضای شاخص [key: string]: T اضافه می‌کند. نام نوع ریشه به title یا $id اسکیما برمی‌گردد. خروجی interface-در-برابر-type و اینکه آیا رشته‌های description اسکیما به کامنت‌های JSDoc /** */ تبدیل شوند را جابه‌جا کنید. نتیجه را کپی کنید یا یک فایل .ts دانلود کنید.

پرسش‌های پرتکرار

کدام ویژگی‌های JSON Schema پشتیبانی می‌شوند؟
object با properties و required، enumهای رشته‌ای به‌عنوان اجتماع‌های literal، number/integer/boolean/null، آرایه‌ها (شامل tupleها)، combinatorهای allOf/anyOf/oneOf، ‏$ref به definitions یا $defs، ‏additionalProperties به‌عنوان یک امضای شاخص، و آرایه‌های نوع nullable مانند ["string","null"].
$ref و definitions چگونه مدیریت می‌شوند؟
یک $ref مانند #/definitions/Address (یا #/$defs/Address) به یک ارجاع به نوع نام‌گذاری‌شده Address تبدیل می‌شود، و هر ورودی زیر definitions یا $defs به‌عنوان export interface یا export type خودش تولید می‌شود، پس ارجاع‌ها درون خروجی حل می‌شوند.
چه چیزی نوع ریشه را نام‌گذاری می‌کند؟
جعبه root-name اگر آن را تنظیم کنید، در غیر این صورت title اسکیما، در غیر این صورت آخرین بخش $id آن، در غیر این صورت Root. نام‌های تعریف از کلید آن‌ها در definitions یا $defs می‌آیند، تبدیل‌شده به PascalCase.
آیا می‌توانم توضیحات اسکیما را نگه دارم؟
بله. با روشن بودن JSDoc (پیش‌فرض)، هر رشته description روی اسکیما یا یک property به‌عنوان یک کامنت /** ... */ بالای نوع یا فیلد متناظر تولید می‌شود، و مستندسازی را در TypeScript تولیدشده حفظ می‌کند.

ابزارهای بیشتر