একটি JSON পেলোড পেস্ট করুন এবং বিনিময়ে TypeScript ইন্টারফেস পাবেন — টাইপড চুক্তি যা একটি অবজেক্টের ঠিক কোন প্রপার্টি আছে এবং প্রতিটি কী ধরনের, তা সুনির্দিষ্টভাবে বর্ণনা করে। এগুলো ছাড়া JSON.parse() থেকে আসা ডেটা any হিসেবে আসে, এডিটর অটোকমপ্লিট বা কম্পাইলার চেক কিছুই পাওয়া যায় না। JSON থেকে TypeScript রূপান্তর হাতে ইন্টারফেস না লিখেই সেই নিরাপত্তা দেয়।
TypeScript সব ছয়টি JSON মানের ধরন কভার করে: string, number, boolean, null, object এবং array। প্রতিটি নেস্টেড JSON অবজেক্ট তার নিজস্ব নামযুক্ত ইন্টারফেসে পরিণত হয়। অ্যারেগুলো প্রথম উপাদান থেকে টাইপ পায়। ফলাফল রানটাইমে JSON.parse() আসলে যা রিটার্ন করে তার সাথে মিলে যায়, তাই ইন্টারফেসগুলো অনুমানের পরিবর্তে বাস্তব ডেটা প্রতিফলিত করে।
বড় বা গভীরভাবে নেস্টেড JSON-এর জন্য হাতে ইন্টারফেস লেখা ক্লান্তিকর এবং ত্রুটিপ্রবণ। একটি JSON থেকে TypeScript জেনারেটর স্বয়ংক্রিয়ভাবে কাঠামো পড়ে, রিকার্সিভলি নেস্টিং সামলায় এবং কয়েক সেকেন্ডে পরিষ্কার ইন্টারফেস কোড আউটপুট করে। অপরিচিত API সংযুক্ত করার সময়, মক ডেটা দিয়ে প্রোটোটাইপ করার সময়, অথবা JavaScript কোডবেস TypeScript-এ মাইগ্রেট করার সময় এটি বিশেষভাবে কার্যকর। এটি নেস্টেড প্রপার্টির নাম ও ধরন হাতে ট্র্যাক করার ঝামেলা থেকেও মুক্তি দেয়, যাতে আপনি টাইপ বয়লারপ্লেটের পরিবর্তে অ্যাপ্লিকেশন লজিকে মনোযোগ দিতে পারেন।
JSON থেকে TypeScript জেনারেটর কেন ব্যবহার করবেন?
হাতে TypeScript ইন্টারফেস তৈরি করা ছোট অবজেক্টের জন্য বাস্তবসম্মত, কিন্তু নেস্টেড কাঠামো বা বড় API রেসপন্সের সাথে দ্রুত জটিল হয়ে পড়ে। তিন স্তরের নেস্টিং সহ একটি ৫০-ফিল্ডের API রেসপন্স বিবেচনা করুন — সেটি হাতে লিখতে ডজনখানেক ইন্টারফেস লাগে, প্রতিটি টাইপো বা মিস হওয়া nullable ফিল্ডের সম্ভাব্য উৎস। একটি স্বয়ংক্রিয় জেনারেটর মিলিসেকেন্ডে পূর্ণ সেট তৈরি করে এবং আপনার কোড ও তা যে ডেটা ব্যবহার করে তার মধ্যে টাইপ অমিলের সম্ভাবনা কমায়। নির্ভুলতার বাইরে, এটি আপনার টাইপগুলো প্রকৃত API চুক্তির সাথে সামঞ্জস্যপূর্ণ রাখে। কোনো সার্ভিস তার রেসপন্স কাঠামো পরিবর্তন করলে, কেবল আপডেট করা JSON পেস্ট করুন এবং পুনরায় জেনারেট করুন — হাতে লেখা ইন্টারফেস ফাইলে প্রতিটি পরিবর্তিত প্রপার্টি খুঁজে বের করার চেয়ে অনেক দ্রুত।
⚡
তাৎক্ষণিক ইন্টারফেস জেনারেট করুন
যেকোনো JSON পেলোড পেস্ট করুন এবং মিলিসেকেন্ডে সঠিকভাবে টাইপড ইন্টারফেস পান। কোনো কনফিগারেশন বা বিল্ড স্টেপ প্রয়োজন নেই।
🔒
ডেটা গোপন রাখুন
সমস্ত রূপান্তর আপনার ব্রাউজারে চলে। আপনার JSON কখনো আপনার মেশিন ছাড়ে না, যা প্রোডাকশন ডেটা বা অভ্যন্তরীণ API রেসপন্সের সাথে কাজ করার সময় গুরুত্বপূর্ণ।
📋
নেস্টেড কাঠামো স্বয়ংক্রিয়ভাবে সামলান
নেস্টেড অবজেক্টগুলো আলাদা নামযুক্ত ইন্টারফেস তৈরি করে। অ্যারে, nullable ফিল্ড এবং মিশ্র টাইপ সবই ম্যানুয়াল হস্তক্ষেপ ছাড়াই সমাধান হয়।
🌐
কোনো অ্যাকাউন্ট বা ইনস্টলেশন নেই
যেকোনো আধুনিক ব্রাউজারে কাজ করে। ইনস্টল করার জন্য কোনো npm প্যাকেজ নেই, কনফিগার করার জন্য কোনো CLI টুল নেই, পূরণ করার জন্য কোনো সাইনআপ ফর্ম নেই।
JSON থেকে TypeScript ব্যবহারের ক্ষেত্র
ফ্রন্টএন্ড API সংযোজন
আপনার React, Angular বা Vue কম্পোনেন্টের জন্য ইন্টারফেস জেনারেট করতে একটি REST বা GraphQL JSON রেসপন্স পেস্ট করুন। টাইপ-সেফ props ও state আচমকা রানটাইম এরর এড়াতে সাহায্য করে। একটি মনোরেপোতে ফ্রন্টএন্ড ও ব্যাকএন্ডের মধ্যে জেনারেটেড ইন্টারফেস শেয়ার করতে পারেন যাতে উভয় পক্ষ একই ডেটা আকারে একমত থাকে।
ব্যাকএন্ড রেসপন্স টাইপিং
তৃতীয়-পক্ষের API ব্যবহারকারী Node.js ও Deno সার্ভিসগুলো জেনারেটেড ইন্টারফেস থেকে উপকৃত হয়। একবার চুক্তি সংজ্ঞায়িত করুন, কম্পাইল সময়ে আকারের অমিল ধরুন। জেনারেটেড ইন্টারফেস সার্ভিস ব্যবহারকারীদের জন্য হালকা ডকুমেন্টেশনও বটে, যা আলাদা স্কিমা ফাইল বা উইকি পেজের প্রয়োজনীয়তা কমায়।
DevOps কনফিগারেশন ফাইল
AWS CDK বা Pulumi-এর মতো ইনফ্রাস্ট্রাকচার টুল JSON কনফিগ ব্যবহার করে। ডিপ্লয়মেন্টের আগে যাচাই করতে সেই কনফিগের জন্য TypeScript টাইপ জেনারেট করুন। এটি টাইপো বা ভুল মানের ধরনের কারণে ভুল কনফিগার করা ডিপ্লয়মেন্ট প্রোডাকশনে পৌঁছানোর আগেই ধরে।
QA টেস্ট ফিক্সচার
JSON টেস্ট ফিক্সচার থেকে ইন্টারফেস জেনারেট করুন যাতে আপনার assertions প্রত্যাশিত ডেটা আকারের সাথে মিলে। টেস্ট চালানোর আগে অনুপস্থিত বা নাম পরিবর্তিত ফিল্ড ধরুন।
ডেটা পাইপলাইন চুক্তি
যখন একটি পাইপলাইন JSON আউটপুট তৈরি করে, জেনারেটেড ইন্টারফেস ডাউনস্ট্রিম ব্যবহারকারীদের জন্য স্কিমা হিসেবে কাজ করে। আউটপুট আকারে পরিবর্তন কম্পাইল-সময় ত্রুটি ট্রিগার করে।
TypeScript শেখা
TypeScript-এ নতুন শিক্ষার্থী ও ডেভেলপাররা পরিচিত JSON কাঠামো পেস্ট করে দেখতে পারেন কীভাবে ইন্টারফেস ডেটার সাথে মানচিত্র করে। এটি ডায়নামিক ও স্ট্যাটিক টাইপিংয়ের মধ্যে ব্যবধান দূর করে।
JSON থেকে TypeScript টাইপ ম্যাপিং রেফারেন্স
প্রতিটি JSON মান একটি TypeScript টাইপে ম্যাপ হয়। নীচের সারণী দেখায় প্রতিটি JSON প্রিমিটিভ ও কাঠামোগত টাইপ কীভাবে অনুবাদ হয়। এই ম্যাপিং ECMA-404 JSON মান এবং TypeScript-এর অন্তর্নির্মিত টাইপ অনুসরণ করে।
JSON টাইপ
উদাহরণ মান
TypeScript টাইপ
string
"hello"
string
number
42, 3.14
number
boolean
true, false
boolean
null
null
null
object
{"key": "value"}
nested interface
array
[1, 2, 3]
number[] (inferred from first element)
TypeScript interface বনাম type অ্যালিয়াস
TypeScript অবজেক্টের আকার বর্ণনা করতে দুটি উপায় অফার করে: interface ডিক্লারেশন এবং type অ্যালিয়াস। উভয়ই JSON কাঠামো উপস্থাপনের জন্য কাজ করে, তবে এক্সটেনশন ও মার্জিং আচরণে পার্থক্য রয়েছে। বেশিরভাগ JSON-থেকে-TypeScript জেনারেটর interface আউটপুট করে কারণ TypeScript-এ অবজেক্টের আকারের জন্য এটি প্রচলিত পছন্দ।
interface
ডিক্লারেশন মার্জিং এবং extends সিনট্যাক্স সমর্থন করে। অবজেক্টের আকারের জন্য পছন্দনীয়, বিশেষত পাবলিক API ও লাইব্রেরিতে। অন্য interface দ্বারা এক্সটেন্ড করা বা type-এর সাথে ইন্টারসেক্ট করা যায়।
type
ইউনিয়ন টাইপ, ইন্টারসেকশন টাইপ ও ম্যাপড টাইপ সমর্থন করে। গণনা করা টাইপ, discriminated union বা প্রিমিটিভ অ্যালিয়াস করার প্রয়োজনে বেশি উপযুক্ত। ডিক্লারেশন মার্জিংয়ের জন্য পুনরায় খোলা যায় না।
কোড উদাহরণ
নীচে বিভিন্ন ভাষা ও টুলে JSON থেকে TypeScript ইন্টারফেস জেনারেট করার উদাহরণ রয়েছে। প্রতিটি স্নিপেট চালানোযোগ্য আউটপুট তৈরি করে।
যদি একটি JSON মান null হয়, জেনারেটর প্রপার্টিটিকে ? সাফিক্স দিয়ে অপশনাল হিসেবে চিহ্নিত করে এবং null টাইপ নির্ধারণ করে। অনুপস্থিত কী ও null মানের মধ্যে পার্থক্য করতে চাইলে অনুপস্থিত প্রপার্টির জন্য undefined ব্যবহার করতে আউটপুট ম্যানুয়ালি সামঞ্জস্য করতে পারেন।
JSON অ্যারে TypeScript-এ রূপান্তর করা যায়?
হ্যাঁ। যদি আপনার রুট JSON একটি অ্যারে হয়, জেনারেটর আইটেম টাইপ অনুমান করতে প্রথম উপাদান পরীক্ষা করে এবং সেই উপাদানের জন্য একটি ইন্টারফেস আউটপুট করে। রুট টাইপ সেই ইন্টারফেসের পরে [] হয়ে যায়। খালি অ্যারে unknown[] তৈরি করে কারণ পরীক্ষা করার মতো কোনো উপাদান নেই।
গভীরভাবে নেস্টেড JSON অবজেক্টের ক্ষেত্রে কী হয়?
প্রতিটি নেস্টেড অবজেক্ট একটি আলাদা নামযুক্ত ইন্টারফেস তৈরি করে। নামটি প্রপার্টি কী থেকে নেওয়া হয়, PascalCase-এ রূপান্তরিত হয়। উদাহরণস্বরূপ, "shipping_address" নামের একটি প্রপার্টি ShippingAddress নামের একটি ইন্টারফেস তৈরি করে। এটি চার বা পাঁচ স্তরের নেস্টিং সহ JSON-এর জন্যও আউটপুট পাঠযোগ্য রাখে। যদি একাধিক নেস্টেড অবজেক্ট একই কাঠামো শেয়ার করে, কোডবেসে অপ্রয়োজনীয় পুনরাবৃত্তি কমাতে সেগুলো একটি শেয়ার করা ইন্টারফেসে একত্রিত করতে পারেন।
json2ts ও quicktype-এর মধ্যে পার্থক্য কী?
json2ts একটি সহজ কনভার্টার যা JSON মান সরাসরি TypeScript ইন্টারফেসে ম্যাপ করে। quicktype আরও এগিয়ে যায়, একাধিক JSON স্যাম্পল বিশ্লেষণ করে, একই রকম আকার একত্রিত করে এবং ২০-এর বেশি ভাষায় আউটপুট সমর্থন করে। এককালীন রূপান্তরের জন্য ব্রাউজার-ভিত্তিক টুল দ্রুততর। CI পাইপলাইন বা বহু-ভাষার কোডজেনের জন্য quicktype আরও উপযুক্ত।
JSON-এর জন্য type অ্যালিয়াসের পরিবর্তে interface কেন ব্যবহার করবেন?
Interface ডিক্লারেশন মার্জিং সমর্থন করে, অর্থাৎ মূল ফাইল পরিবর্তন না করে আলাদা ফাইলে একটি জেনারেটেড interface এক্সটেন্ড করতে পারেন। বেশিরভাগ এডিটরে এগুলো আরও স্পষ্ট ত্রুটি বার্তাও তৈরি করে। ইউনিয়ন টাইপ বা ম্যাপড টাইপের প্রয়োজনে type অ্যালিয়াস ভালো, তবে সরল JSON অবজেক্টের আকারের জন্য interface মানসম্পন্ন পছন্দ। যদি আপনি একটি লাইব্রেরি বা SDK তৈরি করছেন, interface প্রায় সবসময় সঠিক পছন্দ কারণ ডাউনস্ট্রিম ব্যবহারকারীরা আপনার সোর্স না ছুঁয়ে ডিক্লারেশন মার্জিং দিয়ে সেগুলো সমৃদ্ধ করতে পারেন।
অ্যারেতে অসামঞ্জস্যপূর্ণ টাইপ সহ JSON এই টুল সামলাতে পারে?
জেনারেটর প্রথম non-null উপাদান থেকে অ্যারে উপাদানের টাইপ অনুমান করে। যদি আপনার অ্যারেতে মিশ্র টাইপ থাকে — যেমন string-এর সাথে অবজেক্ট মিশ্রিত — আউটপুট শুধু প্রথম উপাদানের আকার প্রতিফলিত করে। ভিন্নধর্মী অ্যারের জন্য, সব সম্ভাব্য উপাদান টাইপ সঠিকভাবে উপস্থাপন করতে জেনারেশনের পরে ম্যানুয়ালি একটি ইউনিয়ন অ্যারে টাইপ সংজ্ঞায়িত করতে হবে।
বাস্তব প্রজেক্টে জেনারেটেড ইন্টারফেস কীভাবে ব্যবহার করব?
জেনারেটেড ইন্টারফেসগুলো আপনার প্রজেক্টের একটি .ts ফাইলে কপি করুন, সাধারণত types/ বা models/ ডিরেক্টরির অধীনে। যেখানে JSON ডেটা ফেচ বা প্রক্রিয়া করেন সেখানে সেগুলো ইম্পোর্ট করুন। রানটাইমে API রেসপন্স ইন্টারফেসের সাথে মিলে যায় কিনা নিশ্চিত করতে Zod বা io-ts-এর মতো রানটাইম ভ্যালিডেটরের সাথে যুক্ত করুন। Zod-এর সাথে, তার infer ইউটিলিটি ব্যবহার করে সরাসরি স্কিমা থেকে TypeScript টাইপ ডেরাইভ করতে পারেন, যা ইন্টারফেস সংজ্ঞা ও ভ্যালিডেশন লজিকের মধ্যে অপ্রয়োজনীয় পুনরাবৃত্তি দূর করে।
জেনারেটেড TypeScript ইন্টারফেস কি রানটাইম টাইপ নিরাপত্তা দেয়?
না — TypeScript-এর টাইপ সিস্টেম কম্পাইলেশনে মুছে যায়। ইন্টারফেস শুধু আপনার এডিটর ও বিল্ডের সময় থাকে, রানটাইমে নয়। JSON.parse() সবসময় any রিটার্ন করে, পরে যে টাইপ নির্ধারণ করুন না কেন। রানটাইমে টাইপ প্রয়োগ করতে, আপনার জেনারেটেড ইন্টারফেসের সাথে Zod বা io-ts-এর মতো লাইব্রেরি যুক্ত করুন। এই লাইব্রেরিগুলো যাচাই করে যে একটি প্রাপ্ত অবজেক্ট ব্যবহারের আগে প্রত্যাশিত আকারের সাথে সত্যিই মিলে কিনা, যা ত্রুটিপূর্ণ API রেসপন্স, অনুপস্থিত ফিল্ড এবং অপ্রত্যাশিত null মান থেকে সুরক্ষা দেয়।