JSON سے TypeScript انٹرفیس

استعمال کا طریقہ 3 مراحل
  1. JSON نمونہ چسپاں کریں۔
  2. بنیادی انٹرفیس کا نام اور آؤٹ پٹ کا انداز طے کریں۔
  3. اقسام بنائیں دبائیں، پھر کاپی کریں۔
TypeScript

اقسام ایک نمونے سے اخذ کی جاتی ہیں، اس لیے یہ بتاتی ہیں کہ اُس نمونے میں کیا ہے، نہ کہ API کیا ضمانت دیتا ہے۔ صفوں کو ہر عنصر کے ساتھ ملایا جاتا ہے، اور یہی چیز اختیاری خانوں کو قابلِ شناخت بناتی ہے؛ خالی صف unknown[] بن جاتی ہے کیونکہ نمونے میں کچھ نہیں بتاتا کہ اس میں کیا ہے، اور null قدریں حذف ہونے کے بجائے null کے ساتھ ایک یونین بن جاتی ہیں۔ جو کلیدیں درست شناخت کار نہ ہوں انہیں اقتباس میں رکھا جاتا ہے۔

یہ ٹول کیسے کام کرتا ہے

ایک JSON نمونہ پڑھا جاتا ہے اور جو کچھ واقعی موجود ہو اسی سے TypeScript کا انٹرفیس اخذ کیا جاتا ہے۔ اندرونی آبجیکٹ اندر ہی رکھنے کے بجائے اپنے الگ نامزد اقسام بن جاتے ہیں، اس لیے نتیجہ ایسا پڑھا جاتا ہے جیسے کسی انسان نے لکھا ہو۔ صفوں کو صرف پہلے عنصر کے بجائے ان کے سب عناصر پر جانچا جاتا ہے، اور یہی وہ چیز ہے جو ایسے خانے کو پکڑتی ہے جو زیادہ تر ریکارڈوں میں سٹرنگ ہو اور کسی ایک میں null۔

جہاں صف کے عناصر آپس میں مختلف ہوں، وہاں اندازے کے بجائے یونین قسم بنائی جاتی ہے۔ جو کلیدیں درست شناخت کنندے نہ ہوں انہیں واوین میں رکھا جاتا ہے، اور محفوظ الفاظ سے ٹکرانے والی کلیدیں سنبھال لی جاتی ہیں۔ اختیاری خصوصیات والی ترتیب کسی خانے کو اختیاری نشان زد کرتی ہے جہاں وہ صف کے کچھ آبجیکٹوں میں موجود نہ ہو — اور یہ عموماً اسے لازمی قرار دے کر بعد میں پتہ چلنے سے حقیقت کے زیادہ قریب ہوتا ہے۔

نمونے سے کیا اخذ ہو سکتا ہے اور کیا نہیں

  • نمونہ شہادت ہے، تفصیل نامہ نہیں: جو خانہ آپ کے نمونے میں اتفاقاً سٹرنگ ہو اسے سٹرنگ کی قسم دی جاتی ہے۔ اگر API وہاں null بھی لوٹا سکتی ہو تو یہ صرف API کی دستاویز ہی بتائے گی۔
  • اسے ایک کے بجائے کئی ریکارڈ دیں: آبجیکٹوں کی صف اخذ کرنے کو موازنے کے لیے کچھ دیتی ہے، اور اختیاری خانے اور یونین سرے سے اسی طرح دریافت ہوتے ہیں۔
  • اعداد اپنے امتیاز کھو دیتے ہیں: JSON میں عدد کی ایک ہی قسم ہے، اس لیے صحیح عدد والا شناخت کنندہ اور اعشاری قیمت دونوں number بن جاتے ہیں۔ انہیں تنگ کرنا ہاتھ کا کام ہے۔
  • تاریخیں سٹرنگ کی صورت میں آتی ہیں: JSON میں تاریخ کی کوئی قسم نہیں۔ جو خانہ وقت کی مہر لگتا ہو اسے سٹرنگ کی قسم ملتی ہے، اور اسے بدلنا آپ کے کوڈ کا فیصلہ ہے۔

A sample is evidence, not a specification

The [msm_tool slug="json-to-typescript"] infers a TypeScript interface from what is actually present in the JSON handed to it, which means a field that happens to be a string in the sample is typed as a string — full stop. If the real API can also return null for that field on some other request, nothing in the sample can reveal that, and only the API's own documentation will.

Feed it several records, not one

An array of objects gives the inference something to compare across, which is the only way optional fields and union types get discovered at all. A single object shows only one version of the shape; comparing many is what reveals that a field is sometimes missing, or sometimes a different type entirely.

Numbers lose their distinctions on the way in

JSON has exactly one numeric type, so an integer identifier and a decimal price both arrive as the same kind of value and both become `number` in the generated interface. Narrowing that back into something more specific is a manual step afterwards, since nothing in a JSON sample carries the distinction to infer from.

Dates arrive as strings, because JSON has no date type

A field that looks exactly like a timestamp is typed as a string regardless, since JSON itself has no native date representation for the inference to detect. Converting that string into an actual date remains a decision made in code, not something the generated type can express on its own.

Nested objects become their own named types

Rather than inlining a nested object's shape directly into its parent, each one is given its own named interface, which reads closer to what a person would actually write by hand and makes the resulting type reusable elsewhere rather than trapped inside a single larger definition.

Where the elements of an array disagree

When different objects in the same array show a field taking different types, the result is a union type rather than a guess at which one is "correct" — both possibilities are represented rather than one being silently discarded. Keys that are not valid identifiers are quoted, and keys that collide with reserved words are handled rather than left to produce invalid TypeScript.

اکثر پوچھے گئے سوالات

خاص طور پر JSON سے TypeScript انٹرفیس کے بارے میں۔ اس زمرے سے متعلق عمومی سوالات کے جواب زمرے کے صفحے پر موجود ہیں۔

کیونکہ آپ کے نمونے نے کبھی null نہیں دکھایا۔ اخذ کرنا صرف اسی کو بیان کر سکتا ہے جو اسے دیا گیا — اسے ایسا ریکارڈ دیں جہاں وہ خانہ null ہو، تو یہ یونین بنا دے گا۔
کئی، صف کی صورت میں۔ ریکارڈوں کا موازنہ ہی وہ طریقہ ہے جس سے اختیاری خانے اور یونین اقسام پکڑی جاتی ہیں؛ اکیلا آبجیکٹ ان میں سے کچھ نہیں دکھا سکتا۔
JSON میں عدد کی صرف ایک قسم ہے، اس لیے نمونے میں صحیح اعداد اور اعشاری اعداد میں فرق نہیں کیا جا سکتا۔ اسے تنگ کرنا ہاتھ کا کام ہے۔
وہ سٹرنگ ہی رہتی ہیں، کیونکہ JSON میں تاریخ کی کوئی قسم نہیں۔ انہیں بدلنا آپ کے کوڈ کا فیصلہ ہے، ایسی چیز نہیں جو اخذ کرنے سے طے ہو سکے۔
نہیں۔ ہر ایک اپنا نامزد انٹرفیس بن جاتا ہے، جو بہتر پڑھا جاتا ہے اور آپ کو وہ قسم کہیں اور دوبارہ استعمال کرنے دیتا ہے۔

نئے ٹولز، خصوصیات اور کارکردگی بڑھانے کے مشوروں کی اطلاع پانے کے لیے سبسکرائب کریں۔