مبدل JSON به TypeScript

یک پاسخ API را جای‌گذاری کنید و interface یا type alias آمادهٔ TypeScript بگیرید؛ نوع‌های تودرتو، فیلدهای اختیاری و unionهای null خودکار استنتاج می‌شوند.

اجرا در مرورگر شمابدون ثبت‌نامبدون آپلود

TypeScript

نحوهٔ استفاده از JSON به TypeScript

  1. یک نمونهٔ JSON، مثلاً پاسخ یک API، را در کادر سمت راست جای‌گذاری کنید یا یک فایل .json باز کنید.
  2. نام نوع ریشه را تعیین کنید (مثلاً User یا ApiResponse).
  3. اعلان‌های interface یا type را انتخاب کنید و export، readonly یا اختیاری بودن همهٔ فیلدها را تنظیم کنید.
  4. برای مقادیری که نمونه نمی‌تواند نوعشان را نشان دهد، مانند آرایه‌های خالی و nullها، unknown (امن‌تر) یا any را انتخاب کنید.
  5. کد تولیدشده را کپی کنید یا به‌صورت فایل .ts دانلود کنید.

نوع‌ها چگونه استنتاج می‌شوند

  • مقادیر اولیه: رشته‌ها، اعداد و مقادیر بولی به string، number و boolean نگاشت می‌شوند.
  • اشیای تودرتو به interfaceهای نام‌دار مستقل با PascalCase تبدیل می‌شوند، بنابراین billing_address به BillingAddress تبدیل می‌شود.
  • آرایه‌های اشیا در یک نوع آیتم با نام مفرد ادغام می‌شوند: users نوع User[] را می‌دهد. کلیدی که در برخی آیتم‌ها نیست اختیاری می‌شود (key?:).
  • مقادیر null با سایر مقادیر دیده‌شده برای آن کلید ترکیب می‌شوند: string | null. کلیدی که همیشه null است به unknown یا any برمی‌گردد.
  • آرایه‌های مختلط به آرایه‌های union مانند (number | string)[] تبدیل می‌شوند.
  • ساختارهای یکسان یک بار اعلان و دوباره استفاده می‌شوند، و ساختارهای متفاوتی که نام مشترک پیدا می‌کنند یک پسوند عددی می‌گیرند.
  • کلیدهایی که شناسهٔ معتبر نیستند، مانند "first-name" یا "2fa"، داخل نقل‌قول قرار می‌گیرند.

interface در برابر type

برای ساختارهای سادهٔ شیء، این دو تقریباً قابل جایگزینی‌اند. اعلان‌های interface را می‌توان گسترش داد و ادغام کرد و خطاهای کامپایلر کمی واضح‌تری می‌دهند. aliasهای type می‌توانند union و mapped type را هم بیان کنند. بسیاری از تیم‌ها برای مدل‌های API از interface و برای بقیه از type استفاده می‌کنند؛ هر کدام را که کدبیس یا linter شما (@typescript-eslint/consistent-type-definitions) انتظار دارد انتخاب کنید.

نوع‌های بهتر از نمونهٔ شما

نوع‌ها فقط به اندازهٔ نمونه کامل‌اند. پاسخی را جای‌گذاری کنید که فیلدهای اختیاری دارد، یا آرایه‌ای با چند آیتم متنوع، تا مولد بتواند کلیدهای اختیاری و nullable را تشخیص دهد. مقادیری مانند تاریخ‌ها و enumها در JSON به‌صورت رشتهٔ ساده می‌آیند؛ بعداً آن‌ها را دستی محدود کنید، مثلاً status: 'active' | 'disabled'. برای اعتبارسنجی در زمان اجرا، نوع‌های تولیدشده را با یک کتابخانهٔ schema مانند Zod همراه کنید.

پرسش‌های متداول

آیا JSON من آپلود می‌شود؟
خیر. نوع‌ها با JavaScript در مرورگر شما تولید می‌شوند. پاسخ‌های API حاوی توکن یا اطلاعات شخصی هرگز از دستگاه شما خارج نمی‌شوند.
ویژگی‌های اختیاری چگونه تشخیص داده می‌شوند؟
وقتی اشیای یک آرایه کلیدهای متفاوتی دارند، کلیدهایی که دست‌کم در یک شیء نیستند با ? اختیاری علامت می‌خورند. با یک شیء تنها همهٔ کلیدها الزامی‌اند، مگر اینکه همه اختیاری را فعال کنید.
از <code>unknown</code> استفاده کنم یا <code>any</code>؟
unknown امن‌تر است: TypeScript شما را مجبور می‌کند پیش از استفاده نوع مقدار را محدود کنید. any بررسی نوع را برای آن مقدار خاموش می‌کند. فقط اگر قصد دارید بعداً نوع‌ها را دقیق‌تر کنید از آن استفاده کنید.
چرا تاریخ ISO به‌صورت <code>string</code> تایپ می‌شود؟
JSON نوع تاریخ ندارد، بنابراین تاریخ‌ها در انتقال رشته‌اند. اگر پس از تجزیه آن‌ها را با new Date() تبدیل می‌کنید، ویژگی را در مدل خود به Date تغییر دهید.
آیا JSON بزرگ یا عمیقاً تودرتو را پشتیبانی می‌کند؟
بله. تولید نوع نسبت به حجم ورودی خطی است و به‌صورت محلی اجرا می‌شود، بنابراین پاسخ‌های چند مگابایتی در کمتر از یک ثانیه تبدیل می‌شوند.

ابزارهای مرتبط