টাইপস্ক্রিপ্ট ৬.০ আরসি: নতুন বৈশিষ্ট্য, বড় ধরনের পরিবর্তন এবং কীভাবে প্রস্তুতি নেবেন

সর্বশেষ আপডেট: 03/17/2026
লেখক: C SourceTrail
  • TypeScript 6.0 RC হলো সর্বশেষ JS-ভিত্তিক কম্পাইলার রিলিজ এবং এটি আসন্ন Go-ভিত্তিক TypeScript 7.0-এর সাথে এর আচরণ, ডিফল্ট ও ক্রমবিন্যাসকে সামঞ্জস্যপূর্ণ করে।
  • এই রিলিজে আধুনিক ডিফল্টগুলোকে (স্ট্রিক্ট, ইএসনেক্সট মডিউল, ইএস২০২৫) আরও কঠোর করা হয়েছে, টেম্পোরাল ও ইএস২০২৫ এপিআই এবং নতুন ম্যাপ আপসার্ট ও রেগএক্সপি.এস্কেপ টাইপিং চালু করা হয়েছে।
  • মূল কনফিগারেশন পরিবর্তনগুলোর মধ্যে রয়েছে একটি খালি ডিফল্ট টাইপস অ্যারে, রুটডির-এর ডিফল্ট কনফিগারেশন ডিরেক্টরিতে সেট হওয়া, এবং ES5, পুরোনো মডিউল সিস্টেম, বেসইউআরএল ও লিগ্যাসি রেজোলিউশন মোডগুলোর বিলুপ্তি।
  • টিমগুলোকে 6.0-এ আপগ্রেড করতে, ডেপ্রিকেশনগুলো ঠিক করতে এবং ঐচ্ছিকভাবে --stableTypeOrdering ব্যবহার করতে উৎসাহিত করা হচ্ছে, যাতে TypeScript 7.0-এ মাইগ্রেশনের পথ আরও মসৃণ হয়।

টাইপস্ক্রিপ্ট ৬.০ রিলিজ ক্যান্ডিডেট

TypeScript 6.0 আনুষ্ঠানিকভাবে রিলিজ ক্যান্ডিডেট (RC) পর্যায়ে পৌঁছেছে।এবং এটি শুধু আরেকটি ছোটখাটো আপডেট নয়। এটিই কম্পাইলার এবং ল্যাঙ্গুয়েজ সার্ভিসের দীর্ঘদিনের জাভাস্ক্রিপ্ট ইমপ্লিমেন্টেশনে চলা শেষ প্রধান সংস্করণ, যা প্রজেক্টটি টাইপস্ক্রিপ্ট ৭.০-এর একটি একেবারে নতুন, গো-ভিত্তিক ইঞ্জিনে স্থানান্তরিত হওয়ার ঠিক আগের সংস্করণ। শুধু এই কারণেই ৬.০ একটি অত্যন্ত গুরুত্বপূর্ণ রিলিজ: এটি সেই সেতু যা আপনাকে পার হতে হবে, যার পরেই ভেতরের সবকিছু বদলে যাবে।

আপনি npm থেকে ইনস্টল করে আজই RC ব্যবহার করা শুরু করতে পারেন। সঙ্গে:

npm install -D typescript@rc

টাইপস্ক্রিপ্ট ৬.০-এর মূল ধারণা হলো প্রস্তুতি এবং সামঞ্জস্য বিধান।এই সংস্করণটি 5.9 থেকে 7.0-তে উত্তরণের পথকে মসৃণ করে, ডিফল্ট সেটিংসকে আরও কঠোর করে, পুরোনো অপ্রয়োজনীয় অংশ বাদ দেয় এবং এমন কিছু নির্দিষ্ট ফিচার যোগ করে যা হয় ভবিষ্যতের আচরণের প্রতিচ্ছবি দেখাবে অথবা জাভাস্ক্রিপ্টের আসন্ন সক্ষমতা, যেমন—Temporal, ES2025 API এবং Map-এর “upsert” মেথডগুলোকে উন্মোচন করবে। এর পাশাপাশি, টাইপ সিস্টেমে কিছু সূক্ষ্ম পরিবর্তন, নতুন কম্পাইলার ফ্ল্যাগ এবং ডিফল্ট কনফিগারেশন যোগ করা হয়েছে, যা বাস্তব প্রজেক্টগুলোকে—বিশেষ করে নির্দিষ্ট কিছু ক্ষেত্রে—অবশ্যই প্রভাবিত করবে। types, rootDirএবং কঠোরতা।

গো-ভিত্তিক ৭.০-এর সেতু হিসেবে টাইপস্ক্রিপ্ট ৬.০

টাইপস্ক্রিপ্ট ৬.০ বিশেষভাবে বিদ্যমান জাভাস্ক্রিপ্ট কোডবেসের সর্বশেষ প্রধান সংস্করণ হিসেবে ডিজাইন করা হয়েছে।টাইপস্ক্রিপ্ট টিম কম্পাইলার এবং ল্যাঙ্গুয়েজ সার্ভিসকে নতুন করে লিখছে। motor nativo en Goনেটিভ পারফরম্যান্স এবং শেয়ার্ড-মেমরি প্যারালেলিজমের সুবিধা গ্রহণ করে। সেই নতুন ইঞ্জিনটি টাইপস্ক্রিপ্ট ৭.০ এবং তার পরবর্তী সংস্করণগুলোতে আত্মপ্রকাশ করবে, এবং ৬.০ একটি অন্তর্বর্তীকালীন পর্যায় হিসেবে ঠিক এর সামনে অবস্থান করবে।

6.0-এর বেশিরভাগ বড় ধরনের পরিবর্তন এবং অপ্রচলিত বৈশিষ্ট্য যোগ করা হয়েছে, যাতে ভবিষ্যতে আপনি 7.0-এ আপগ্রেড করলেও তা সহনীয় থাকে।যেসব অপশন নেটিভ আর্কিটেকচারে দক্ষতার সাথে সাপোর্ট করা যায় না, পুরোনো মডিউল সিস্টেম এবং দীর্ঘদিনের অদ্ভুত আচরণগুলোকে হয় সরিয়ে ফেলা হচ্ছে অথবা একটি বিকল্প পথসহ স্পষ্টভাবে ডেপ্রিকেটেড হিসেবে চিহ্নিত করা হচ্ছে: আপনি সেট করতে পারেন "ignoreDeprecations": "6.0" আপনার tsconfig.json 6.0 সংস্করণে ডেপ্রিকেশন ডায়াগনস্টিকস দমন করার জন্য। কিন্তু 7.0 সংস্করণে এই ফ্ল্যাগটি আপনার কোনো কাজে আসবে না—কারণ এই অপশনগুলো সম্পূর্ণরূপে বিলুপ্ত করার পরিকল্পনা রয়েছে।

কোনো কনফিগারেশন পরিমার্জন করার আগে যদি আপনি “৭.০-এর জন্য অপেক্ষা” করার প্রলোভনে পড়েন, তবে তা একটি ফাঁদ।6.0 RC হলো সেই সংস্করণ যেখানে আপনার ঠিক করার কথা। tsconfigটাইপগুলোকে স্বাভাবিক করুন, এবং ডেপ্রিকেটেড ফ্ল্যাগগুলো নিয়ে কাজ করুন। ছোট ও নিয়ন্ত্রিত পরিবর্তনের মাধ্যমে 5.x → 6.0 → 7.0-এ যাওয়ার চেয়ে দুটি বিশাল লাফ (5.x → 7.0) দেওয়া সবসময়ই বেশি ক্ষতিকর হবে।

6.0 বিটা থেকে কী পরিবর্তন হয়েছে?

বিটা এবং আরসি-এর মধ্যবর্তী সময়ে, টাইপস্ক্রিপ্ট টিম প্রধানত ভবিষ্যতের ৭.০ ইঞ্জিনের সাথে এর আচরণকে সামঞ্জস্যপূর্ণ করার উপর মনোযোগ দিয়েছিল।এছাড়াও টাইপ চেকিং এবং ডম টাইপিং-এ কিছু সুনির্দিষ্ট পরিবর্তন আনা হয়েছে।

একটি গুরুত্বপূর্ণ পরিবর্তন জেনেরিক কলে পাঠানো ফাংশন এক্সপ্রেশনের টাইপ চেকিংকে প্রভাবিত করে।বিশেষ করে JSX প্রেক্ষাপটে। যখন জেনেরিক ফাংশনগুলোকে কলব্যাকের মাধ্যমে কল করা হয় (উদাহরণস্বরূপ React বা অন্যান্য JSX কম্পোনেন্টে), তখন RC ইনফারেন্সকে আরও কঠোর করে তোলে, যাতে এটি 7.0 যা করবে তার আরও সঠিক প্রতিফলন ঘটায়। বাস্তবে, আপনি হয়তো লক্ষ্য করবেন যে কিছু কল যা ইমপ্লিসিট ইনফারেন্সের উপর নির্ভর করত, সেগুলোতে এখন টাইপ চেকিং ঠিক রাখতে একটি এক্সপ্লিসিট টাইপ আর্গুমেন্টের প্রয়োজন হয়, তবে এর মাধ্যমে আপনি বিদ্যমান কোডের আরও বেশি আসল বাগও ধরতে পারবেন।

ইমপোর্ট অ্যাসারশন সিনট্যাক্সের অবচয়ও প্রসারিত করা হয়েছে।টাইপস্ক্রিপ্ট ইতিমধ্যেই পুরানোটির বিরুদ্ধে সতর্ক করছিল। import ... assert {...} ECMAScript প্রস্তাবনাটি ইম্পোর্ট অ্যাট্রিবিউটের দিকে স্থানান্তরিত হওয়ার কারণে স্ট্যাটিক ইম্পোর্টের সিনট্যাক্সে পরিবর্তন আসছে। withএখন, সেই অপ্রচলনটি ডাইনামিক ইম্পোর্ট ব্যবহার করার ক্ষেত্রেও প্রযোজ্য। import() অ্যাসারশন অবজেক্টের সাথে যেমন import(..., { assert: {...}})নির্দেশনা স্পষ্ট: সব জায়গায় অ্যাট্রিবিউট ইম্পোর্ট করার দিকে এগিয়ে যেতে হবে।

বর্তমান ওয়েব প্ল্যাটফর্মের মানদণ্ডের সাথে সামঞ্জস্য রেখে DOM লাইব্রেরির প্রকারভেদগুলো হালনাগাদ করা হয়েছে।এর মধ্যে ওয়েব প্রেক্ষাপটে টেম্পোরাল-সম্পর্কিত এপিআইগুলোর আপডেটও অন্তর্ভুক্ত। আপনি যদি ব্রাউজার অ্যাপ তৈরি করেন, তবে এই নতুন এপিআইগুলোকে ঘিরে আরও নির্ভুল টাইপিং এবং উন্নত এডিটর টুলিং থেকে আপনি উপকৃত হবেন।

যে ফাংশনগুলো কখনো ব্যবহার করে না সেগুলোর জন্য প্রসঙ্গ সংবেদনশীলতা কম। this

TypeScript 6.0 সুস্পষ্ট ফাংশন ছাড়া ফাংশনগুলোর সাথে আচরণের ক্ষেত্রে একটি সূক্ষ্ম কিন্তু অত্যন্ত কার্যকরী পরিবর্তন এনেছে। this টাইপ অনুমানের সময় ব্যবহারঐতিহাসিকভাবে, যেসব ফাংশনের প্যারামিটারের সুস্পষ্ট টাইপ থাকে না, সেগুলোকে “প্রসঙ্গ-সংবেদনশীল” হিসেবে বিবেচনা করা যেতে পারে, যার অর্থ হলো তাদের প্যারামিটার এবং this ব্যবহারের স্থানের উপর প্রকারভেদ নির্ভর করত। এটি জেনেরিক ইনফারেন্সকে প্রভাবিত করে এবং ফাংশন সিনট্যাক্সের উপর নির্ভর করে অদ্ভুত আচরণের জন্ম দিতে পারে।

এমন একটি জেনেরিক হেল্পারের কথা ভাবুন যা প্রডিউসার এবং কনজিউমার জোড়া ব্যবহার করে।:

declare function callIt<T>(obj: {
  produce: (x: number) => T,
  consume: (y: T) => void,
}): void;

// Arrow functions: everything infers fine
callIt({
  produce: (x: number) => x * 2,
  consume: y => y.toFixed(),
});

// Flipped property order still fine with arrows
callIt({
  consume: y => y.toFixed(),
  produce: (x: number) => x * 2,
});

কিন্তু মেথড সিনট্যাক্সের ক্ষেত্রে, পূর্ববর্তী আচরণটি আশ্চর্যজনক হতে পারে।একই লজিক, মেথড হিসেবে লিখলে, প্রোপার্টিগুলোর ক্রম পরিবর্তন করা হলে ব্যর্থ হতে পারে, কারণ টাইপস্ক্রিপ্ট জেনেরিক আর্গুমেন্ট অনুমান করার সময় “প্রসঙ্গ-সংবেদনশীল” ফাংশনগুলোকে এড়িয়ে যায়। মেথডগুলোর অন্তর্নিহিত একটি this প্যারামিটার, যা তাদেরকে সেই সংবেদনশীল বিভাগে ঠেলে দিয়েছিল যদিও this আসলে কখনো উল্লেখ করা হয়নি।

6.0 সংস্করণে, যে ফাংশনগুলো কখনো পড়ে না this এখন কম প্রাসঙ্গিকভাবে সংবেদনশীল হিসাবে বিবেচিত হয়অন্যভাবে বললে, যদি কম্পাইলার দেখে যে this যদি কোনো ফাংশনের ভিতরে এটি একেবারেই ব্যবহার না করা হয়, তবে ইনফারেন্সের সময় এটি সেই ফাংশনটিকে কোনো সমস্যায় ফেলবে না। এর মানে হলো, জেনেরিক ইনফারেন্সের ক্ষেত্রে মেথড সিনট্যাক্স এবং অ্যারো সিনট্যাক্স এখন অনেক বেশি সামঞ্জস্যপূর্ণ, এবং এইসব ক্ষেত্রে "এক প্রপার্টি অর্ডারে কাজ করে, অন্যটিতে করে না" এই অদ্ভুত আচরণটি দূর হয়ে যায়।

এই পরিবর্তনটি টাইপ ইনফারেন্সের জন্য প্রার্থীদের অগ্রাধিকার নির্ধারণ প্রক্রিয়াকে উন্নত করে।ব্যবহৃত না হয়েও কাজ করে this টাইপ আর্গুমেন্ট অনুমান করার সময় তথ্যের উচ্চ-অগ্রাধিকার উৎস হয়ে ওঠে, যেমন Tপ্রভাবটি ততটা রহস্যময় নয় unknown টাইপ এবং রিফ্যাক্টর জুড়ে আরও স্থিতিশীল ইনফারেন্স। এই কাজটি করেছেন মাতেউশ বুর্জিনস্কি।

নোডের জন্য সমর্থন #/ সাবপাথ আমদানি

নোডের “সাবপাথ ইমপোর্টস” ফিচারের মাধ্যমে প্যাকেজগুলো অভ্যন্তরীণ ইমপোর্ট অ্যালিয়াস নির্ধারণ করতে পারে। imports ক্ষেত্র package.jsonএই অ্যালিয়াসগুলো ডিপ রিলেটিভ পাথ পরিহার করে ইম্পোর্ট প্রক্রিয়াকে সহজ করে। পূর্বে, প্রতিটি সাবপাথ কী-এর শুরুতে <s> ট্যাগের পরে অন্তত একটি সেগমেন্ট থাকতে হতো। #যা বান্ডলারের প্রচলিত রীতিতে অভ্যস্ত ব্যক্তিদের জন্য একটি ছোট কিন্তু বিরক্তিকর সীমাবদ্ধতা ছিল, যেমন @/....

TypeScript 6.0 এখন সাবপাথ ইম্পোর্ট সমর্থন করে যা দিয়ে শুরু হয় #/, যা নতুন Node 20-এর আচরণের সাথে সামঞ্জস্যপূর্ণ। এর মানে হলো, আপনি এই ধরনের একটি কনফিগারেশন ব্যবহার করতে পারেন:

{
  "name": "my-package",
  "type": "module",
  "imports": {
    "#": "./dist/index.js",
    "#/*": "./dist/*"
  }
}

এই ব্যবস্থার মাধ্যমে, প্যাকেজের ভেতরের মডিউলগুলো—এমনকি ব্যবহারকারীরাও—একটি সংক্ষিপ্ত পদ্ধতির মাধ্যমে ইম্পোর্ট করতে পারে। #/... উপসর্গ দীর্ঘ আপেক্ষিক পথের পরিবর্তে যেমন ../../utils.jsTypeScript এই প্যাটার্নটি বোঝে যখন --moduleResolution তৈরি node20, nodenext, বা bundlerআধুনিক নোড-এর শব্দার্থের প্রতিচ্ছবি হিসেবে। এই উন্নয়নটি অবদানকারী ম্যাজিক-আকারি দ্বারা বাস্তবায়িত হয়েছে।

ব্যবহার --moduleResolution bundler সঙ্গে --module commonjs

পূর্বে, --moduleResolution bundler শুধুমাত্র এর সাথে ব্যবহার করা যেতে পারে --module esnext or preserveপুরানোটির অবমূল্যায়নের সাথে node/node10 মডিউল রেজোলিউশন মোডের কারণে, অনেক প্রোজেক্টের এমন একটি মাইগ্রেশন পথের প্রয়োজন ছিল যা তাদের বর্তমান CommonJS আউটপুটের সাথে সামঞ্জস্যপূর্ণ হয়।

TypeScript 6.0 এখন একত্রিত করার অনুমতি দেয় --moduleResolution bundler সঙ্গে --module commonjsএই সংমিশ্রণটি প্রায়শই সেইসব কোডবেসের জন্য একটি কার্যকরী সোপান, যেগুলো এখনও CommonJS ব্যবহার করে কিন্তু বান্ডলার-কেন্দ্রিক ওয়ার্কফ্লো বা নতুন রেজোলিউশন লজিকের দিকে অগ্রসর হচ্ছে। সেখান থেকে, প্রজেক্টগুলো নিম্নলিখিত যেকোনো একটিতে দীর্ঘমেয়াদী মাইগ্রেশনের পরিকল্পনা করতে পারে:

  • module: "preserve" সঙ্গে moduleResolution: "bundler" বান্ডেল করা ওয়েব অ্যাপ এবং অনুরূপ সেটআপের জন্য, অথবা
  • module: "nodenext" সরাসরি আধুনিক Node.js-কে লক্ষ্য করে তৈরি পরিবেশের জন্য।

এই পরিবর্তনটি বিশেষ করে ছেড়ে যাওয়া দলগুলোর জন্য প্রাসঙ্গিক। moduleResolution: node পিছনে কিন্তু এখনও ESM আউটপুট পুরোপুরি গ্রহণ করার জন্য প্রস্তুত নয়। এটি আপনাকে খাড়া ঢালের পরিবর্তে একটি পর্যায়ক্রমিক পথ দেখায়।

সার্জারির --stableTypeOrdering ৭.০ ক্রম অনুকরণ করার জন্য ফ্ল্যাগ

টাইপস্ক্রিপ্ট ৭.০-তে আসা অন্যতম প্রধান স্থাপত্যগত আপগ্রেড হলো প্যারালাল টাইপ চেকিং।সমান্তরালভাবে একাধিক চেকার চালানোর অর্থ হলো প্রোগ্রামের বিভিন্ন অংশ ভিন্ন ভিন্ন ক্রমে পরিদর্শিত হতে পারে। যদি টাইপ আইডি এবং সিম্বলের ক্রম পরিদর্শনের ক্রমের উপর নির্ভর করে, তাহলে ইউনিয়ন ও প্রপার্টির ক্রম অনির্দিষ্ট হতে পারে, এমনকি ডায়াগনস্টিকসেও বিরল পার্থক্য দেখা দিতে পারে।

TypeScript-এর পুরোনো সংস্করণগুলো এনকাউন্টার অর্ডারের উপর ভিত্তি করে অভ্যন্তরীণ টাইপ আইডি নির্ধারণ করে।সেই আইডিগুলো পরে ইউনিয়ন টাইপ এবং প্রপার্টির মতো বিষয়গুলোকে সাজাতে ব্যবহৃত হয়। একারণেই আপাতদৃষ্টিতে নিরীহ সম্পাদনা—যেমন একটি নতুন কিছু যোগ করা— const বিদ্যমান কোনো ফাংশনের আগে—নিঃসৃত আউটপুটে লিটারাল ইউনিয়নগুলোর ক্রম উল্টে দিতে পারে। .d.ts ফাইলগুলো, অথবা আপনার এডিটরে কিছু টাইপের প্রিন্ট হওয়ার পদ্ধতি পরিবর্তন করুন।

টাইপস্ক্রিপ্ট ৭.০ অভ্যন্তরীণ অবজেক্টগুলোর জন্য একটি সুনির্দিষ্ট, বিষয়বস্তু-ভিত্তিক ক্রমবিন্যাস ব্যবহার শুরু করেছে।প্রতিটি টাইপ বা সিম্বল তার গঠন অনুসারে সাজানো হয়, আকস্মিক পরিদর্শনের ক্রম অনুসারে নয়। তাই, প্যারালালিজম বা কম্পাইলেশন অর্ডার নির্বিশেষে একই প্রোগ্রাম ধারাবাহিকভাবে একই ক্রম তৈরি করবে। এটি “আমার ইউনিয়ন হঠাৎ উল্টে গেল কেন?”—এই রহস্যের সমাধান করে।

6.0 এবং 7.0-এর আচরণের তুলনা করতে আপনাকে সাহায্য করার জন্য, RC চালু করেছে --stableTypeOrderingএই ফ্ল্যাগটি সক্রিয় করা হলে, টাইপস্ক্রিপ্ট ৬.০ সেই একই ডিটারমিনিস্টিক টাইপ অর্ডারিং অ্যালগরিদম গ্রহণ করে যা ৭.০ ব্যবহার করে। এর ফলে, তৈরি হওয়া ডিক্লারেশন ফাইলগুলোতে ডিফের সংখ্যা অনেক কমে যায় এবং ৬.x ও ৭.x-এর আউটপুটগুলোর মধ্যে তুলনা আরও অনুমানযোগ্য হয়।

তবে, নিয়তিবাদ বিনামূল্যে পাওয়া যায় না।. সক্রিয় করা হচ্ছে --stableTypeOrdering আপনার কোডবেসের উপর নির্ভর করে এটি টাইপ চেকিংয়ের গতি প্রায় ২৫% পর্যন্ত কমিয়ে দিতে পারে। এটি মূলত সমস্যা নির্ণয় এবং মাইগ্রেশনে সহায়তা করার জন্য তৈরি, কোনো চিরস্থায়ী পারফরম্যান্স সেটিং হিসেবে নয়।

যদি আপনি শুধুমাত্র টাইপ ত্রুটি দেখতে পান যখন --stableTypeOrdering চালু করা হয়এর মানে সাধারণত এই যে, আপনার আগের কোডটি ইনফারেন্সের জন্য টাইপের পুরোনো, প্রায়-অনিচ্ছাকৃত ক্রমের ওপর নির্ভর করছিল, যাতে এটি ‘এমনিতেই কাজ করে’। এর সমাধানে সাধারণত টাইপগুলোকে সুস্পষ্ট করা হয়—যেমন কোনো সমস্যাযুক্ত জেনেরিক কলে একটি টাইপ আর্গুমেন্ট যোগ করা, অথবা কোনো জটিল অবজেক্টের জন্য পুরোপুরি ইনফারেন্সের ওপর নির্ভর না করে ভেরিয়েবলকে একটি নির্দিষ্ট ইন্টারফেস দিয়ে টীকাযুক্ত করা।

নতুন es2025 টার্গেট এবং লাইব্রেরি বিকল্পগুলি

TypeScript 6.0 একটি নতুন বৈশিষ্ট্য যোগ করেছে। es2025 উভয়ের জন্য বিকল্প target এবং libযদিও ES2025 পূর্ববর্তী বছরগুলোর তুলনায় নতুন কোনো কোর সিনট্যাক্স যোগ করেনি, তবে এটি বেশ কিছু স্ট্যান্ডার্ডাইজড এপিআই অন্তর্ভুক্ত করেছে যা আগে সীমাবদ্ধ ছিল। esnext.

লক্ষ্যবস্তু করে বা অন্তর্ভুক্ত করে es2025, আপনি নতুন বিল্ট-ইনগুলির জন্য আপডেট করা টাইপিং পাবেন। মত RegExp.escapeএবং কিছু এপিআই সরিয়ে নেওয়া হয়েছে esnext মধ্যে es2025এর মধ্যে অন্তর্ভুক্ত রয়েছে যেমন— Promise.tryইটারেটর হেল্পার এবং অতিরিক্ত Set যে পদ্ধতিগুলো পূর্ণ স্পেসিফিকেশন পরিপক্কতায় পৌঁছেছে। এই কাজটি করেছেন কেন্তা মোরিউচি।

বৃহত্তর বিষয়টি হলো যে ডিফল্ট target 6.0 সংস্করণে এখন বর্তমান ECMAScript বছরটি ট্র্যাক করা হয়।যার ফলে, বর্তমানে কোনো টার্গেট নির্দিষ্ট না করলে আপনি কার্যত ES2025-এ চলে যান। এটি এভারগ্রিন রানটাইম এবং আধুনিক টুলিংয়ের বাস্তবতার সাথে আরও ভালোভাবে মেলে।

টেম্পোরাল এপিআই-এর জন্য অন্তর্নির্মিত প্রকারগুলি

বহু প্রতীক্ষিত টেম্পোরাল প্রস্তাবটি তৃতীয় পর্যায়ে পৌঁছেছে এবং এটি কুখ্যাতটিকে প্রতিস্থাপন করবে বলে আশা করা হচ্ছে। Date গুরুত্বপূর্ণ তারিখ/সময় সংক্রান্ত কাজের জন্য এপিআইTypeScript 6.0-এ এখন Temporal-এর জন্য ফার্স্ট-ক্লাস টাইপিং অন্তর্ভুক্ত রয়েছে, ফলে আপনি সম্পূর্ণ টাইপ সেফটি ও এডিটর সাপোর্ট সহ Temporal-ভিত্তিক কোড লেখা শুরু করতে পারেন।

টেম্পোরাল টাইপ সক্রিয় করতে, আপনি ব্যবহার করতে পারেন --target esnext অথবা আপনার লাইব্রেরিগুলি স্পষ্টভাবে কনফিগার করুন এরকম কিছুর মাধ্যমে:

{
  "compilerOptions": {
    "lib": 
  }
}

অথবা আপনি শুধুমাত্র টেম্পোরাল সাবসেটটি বেছে নিতে পারেন "esnext.temporal" যদি আপনি আরও সূক্ষ্ম কনফিগারেশন চান। একবার সক্রিয় করা হলে, আপনি এই ধরনের কোড লিখতে পারেন:

let yesterday = Temporal.Now.instant().subtract({
  hours: 24,
});

let tomorrow = Temporal.Now.instant().add({
  hours: 24,
});

console.log(`Yesterday: ${yesterday}`);
console.log(`Tomorrow: ${tomorrow}`);

Temporal ইতিমধ্যেই কিছু রানটাইমে সমর্থিত এবং অন্যগুলিতে পলিফিল করা যেতে পারে।সুতরাং, এই টাইপগুলো আজও প্রকৃতপক্ষে ব্যবহারযোগ্য। MDN-এ এর ডকুমেন্টেশন তৈরি হচ্ছে (যদিও কিছু ফাঁক এখনও পূরণ করা হচ্ছে)। এই টাইপিংগুলো GitHub ব্যবহারকারী Renegade334 প্রদান করেছেন।

আপসার্ট সাপোর্ট: Map.getOrInsert এবং getOrInsertComputed

জাভাস্ক্রিপ্ট ডেভেলপাররা ম্যানুয়ালি “চেক-দেন-সেট-দেন-গেট” প্যাটার্ন লিখে আসছেন Map বছরের জন্যএকটি সাধারণ প্যাটার্ন কোনো কী-এর অস্তিত্ব আছে কিনা তা পরীক্ষা করে, না থাকলে একটি ডিফল্ট মান সেট করে এবং সবশেষে একটি ভ্যালু রিটার্ন করে—এটি এমন একটি গতানুগতিক প্রক্রিয়া যা সহজেই ভুল হতে পারে বা সর্বত্র পুনরাবৃত্তি হতে পারে।

ECMAScript-এর “আপসার্ট” প্রস্তাবনা (বর্তমানে চতুর্থ পর্যায়ে) প্রবর্তন করে getOrInsert এবং getOrInsertComputed on Map এবং WeakMapTypeScript 6.0 এই মেথডগুলোর জন্য টাইপ সাপোর্ট যোগ করে esnext lib, যাতে আপনি এখনই আরও ডিক্লারেটিভ আপসার্ট লেখা শুরু করতে পারেন।

সঙ্গে getOrInsertএরকম একটি বিশদ প্যাটার্ন:

function processOptions(compilerOptions: Map<string, unknown>) {
  let strictValue: unknown;
  if (compilerOptions.has("strict")) {
    strictValue = compilerOptions.get("strict");
  } else {
    strictValue = true;
    compilerOptions.set("strict", strictValue);
  }
  // ...
}

একটি লাইনে সংকুচিত করা যেতে পারে:

function processOptions(compilerOptions: Map<string, unknown>) {
  let strictValue = compilerOptions.getOrInsert("strict", true);
  // ...
}

সহচর getOrInsertComputed ব্যয়বহুল ডিফল্টগুলির জন্য আদর্শএটি একটি কলব্যাক গ্রহণ করে যা শুধুমাত্র কী-টি অনুপস্থিত থাকলেই চালু হয়। সেই কলব্যাকটি এমনকি প্যারামিটার হিসেবেও কী-টি গ্রহণ করতে পারে, যার ফলে আপনি সরাসরি কী-টি থেকেই ডিফল্ট মানটি নির্ধারণ করতে পারেন। TypeScript-এর টাইপিংগুলো এই আচরণগুলোকে নিখুঁতভাবে ধারণ করে, যার জন্য Renegade334-এর অবদানকে আবারও ধন্যবাদ।

RegExp.escape এবং আরও নিরাপদ রেজেক্স বিল্ডিং

আপনি যদি কখনও ব্যবহারকারীর দেওয়া স্ট্রিংগুলিকে একটি রেগুলার এক্সপ্রেশনে যুক্ত করে থাকেন, তাহলে আপনি জানেন যে প্রথমে বিশেষ অক্ষরগুলিকে এস্কেপ করতে হয়।কিন্তু বেশিরভাগ কোডবেস হয় কোনো হেল্পারে এস্কেপিং পুনরায় প্রয়োগ করে, অথবা এটি পুরোপুরি ভুলে যায়। RegExp Escaping প্রস্তাবনা (যা এখন চতুর্থ পর্যায়ে রয়েছে) এর মাধ্যমে এটিকে মানসম্মত করে। RegExp.escape.

TypeScript 6.0 এর জন্য টাইপগুলো প্রকাশ করে RegExp.escape অধীনে es2025 liberal এর সংক্ষিপ্ত রূপএর মানে হলো, যখন আপনি ES2025-কে টার্গেট বা অন্তর্ভুক্ত করবেন, তখন আপনি নিরাপদে এই ধরনের হেল্পার লিখতে পারেন:

function matchWholeWord(word: string, text: string) {
  const escapedWord = RegExp.escape(word);
  const regex = new RegExp(`\\b${escapedWord}\\b`, "g");
  return text.match(regex);
}

এখন আর হাতে ঘোরানো এস্কেপ ফাংশনের প্রয়োজন নেই।এবং টাইপস্ক্রিপ্ট এপিআই-টি সম্পূর্ণরূপে বুঝতে ও টাইপ-চেক করতে পারবে। ES2025 লক্ষ্যমাত্রার কাজের মতোই এই সংযোজনটিও কেন্তা মোরিউচির অবদান।

dom লাইব্রেরিতে এখন ইটারেশন এবং অ্যাসিঙ্ক ইটারেশন এপিআই অন্তর্ভুক্ত রয়েছে।

ঐতিহাসিকভাবে, টাইপস্ক্রিপ্ট DOM ইটারেটর সমর্থনকে বিভক্ত করেছে dom, dom.iterable, এবং dom.asynciterableযদি আপনি পুনরাবৃত্তি করতে চান NodeList or HTMLCollection সঙ্গে for...ofতোমাকে যোগ করতে মনে রাখতে হতো dom.iterable আপনার "lib" কনফিগারেশন পাশাপাশি domএটি বিভ্রান্তির একটি সাধারণ কারণ ছিল, বিশেষ করে যেহেতু সমস্ত আধুনিক ব্রাউজার DOM কালেকশনের উপর ইটারেবল এবং অ্যাসিঙ্ক ইটারেবল সমর্থন করে।

টাইপস্ক্রিপ্ট ৬.০-তে, lib.dom.iterable.d.ts এবং lib.dom.asynciterable.d.ts কার্যকরভাবে একীভূত করা হয় lib.dom.d.tsতার মানে ব্যবহার করা "dom" এখন শুধু 'alone' ব্যবহার করলেই আপনি ডিফল্টরূপে iterable এবং async iterable উভয় ধরনের আচরণ পাবেন।

আপনি এখনও উল্লেখ করতে পারেন dom.iterable এবং dom.asynciterable আপনার tsconfigকিন্তু সেই ফাইলগুলো এখন খালি শেল। যদি আপনার আগের কনফিগারেশনটি দেখতে এইরকম হতো:

{
  "compilerOptions": {
    "lib": 
  }
}

আপনি নিরাপদে এটিকে সরল করে শুধু "dom"এবং DOM সংগ্রহগুলির উপর পুনরাবৃত্তি যেমন document.querySelectorAll("div") তবুও টাইপ-চেক করা হবে:

for (const element of document.querySelectorAll("div")) {
  console.log(element.textContent);
}

এটি একটি ছোট কিন্তু স্বাগতযোগ্য পরিচ্ছন্নতা অভিযান। যা ডিফল্ট DOM লাইব্রেরিকে বর্তমান ব্রাউজারগুলোর বাস্তবতার সাথে সামঞ্জস্যপূর্ণ করে এবং প্রজেক্ট সেটআপের আরেকটি জটিলতা দূর করে।

টাইপস্ক্রিপ্ট ৬.০-এর ডিফল্ট, ডেপ্রিকেশন এবং ব্রেকিং চেঞ্জেস

চমৎকার এপিআই-এর বাইরে, 6.0 সংস্করণটি 1.0-এর পর থেকে টাইপস্ক্রিপ্টের ডিফল্ট সেটিংসে সবচেয়ে সুনির্দিষ্ট কিছু পরিবর্তন এনেছে।এই পরিবর্তনগুলো বর্তমান জাভাস্ক্রিপ্ট ইকোসিস্টেমকে প্রতিফলিত করে: এভারগ্রিন রানটাইম, ভিত্তি হিসেবে ESM, বান্ডলারের ব্যাপক ব্যবহার এবং স্ট্রিক্ট টাইপিং ও পারফরম্যান্সের প্রতি প্রবল আগ্রহ।

দলটি এই সিদ্ধান্তগুলোর নেপথ্যে থাকা কয়েকটি প্রধান প্রবণতা তুলে ধরেছে।ES5 এবং সত্যিকারের পুরোনো ব্রাউজারগুলো প্রায় বিলুপ্ত; AMD/UMD মডিউল সিস্টেমগুলো এখন বিশেষায়িত; এখন প্রায় সবকিছুই মডিউল হিসেবে আসে; স্ট্রিক্ট টাইপিংই এখন সাধারণ নিয়ম; এবং পারফরম্যান্সকে অবশ্যই প্রধান্য দিতে হবে, বিশেষ করে যেহেতু 7.0 সংস্করণে প্যারালাল চেকিং যুক্ত হয়েছে।

ফলস্বরূপ, টাইপস্ক্রিপ্ট ৬.০ এবং ৭.০ আধুনিক ডিফল্ট এবং কম “লেগ্যাসি এস্কেপ ভালভ” সহ তৈরি করা হচ্ছে।6.0 RC-এর জন্য, আপনি সেট করে ডেপ্রিকেশনগুলো সাময়িকভাবে নীরব করতে পারেন। "ignoreDeprecations": "6.0" আপনার tsconfigকিন্তু 7.0-এ সেই বিকল্পগুলো থাকবে না। পরীক্ষামূলক টুলের মতো টুল ব্যবহার করে কিছু সমন্বয় স্বয়ংক্রিয় করা যেতে পারে। ts5to6 কোডমড, যা এই ধরনের জিনিসগুলি পুনর্লিখনে সাহায্য করতে পারে baseUrl এবং rootDir একটি প্রকল্প জুড়ে কনফিগারেশন।

অনেক প্রকল্পের জন্য অবিলম্বে দুটি সমন্বয়ের প্রয়োজন হবে

যদিও বাতিলের একটি দীর্ঘ তালিকা রয়েছে, দুটি কনফিগারেশন পরিবর্তন সম্ভবত সর্বাধিক সংখ্যক কোডবেসকে প্রভাবিত করবে।:

  • স্পষ্টভাবে সেট করুন types বিন্যাস (প্রায়শই) (আপনার টেস্ট ফ্রেমওয়ার্ক সহ)। এটি ছাড়া, আপনি অটো-ইনক্লুডেড অ্যাম্বিয়েন্ট টাইপগুলো হারাবেন। @types/*.
  • স্পষ্টভাবে সেট করা rootDir (সাধারণত "./src") যদি আপনি পুরোনো “কমন রুট ইনফারেন্স”-এর ওপর নির্ভর করে থাকেন। অন্যথায় আপনার নির্গত ফাইল কাঠামোতে সূক্ষ্ম পরিবর্তন আসতে পারে।

অনুপস্থিতির লক্ষণ types গ্লোবাল ভেরিয়েবল সম্পর্কিত প্রচুর ত্রুটি অন্তর্ভুক্ত করুন যেমন process, fs, path, বা describe অসংজ্ঞায়িত হওয়াপরিবর্তনের লক্ষণ rootDir এগুলো মূলত আউটপুট পাথগুলো অপ্রত্যাশিতভাবে একটি অতিরিক্ত লাভ করার সাথে সম্পর্কিত। src অংশ (উদাহরণস্বরূপ) dist/src/index.js পরিবর্তে dist/index.js).

আধুনিক প্রোজেক্টের জন্য ডিফল্ট সেটিংস আপডেট করা হয়েছে।

বেশ কিছু কম্পাইলার অপশনের এখন নতুন ডিফল্ট মান রয়েছে, যা বেশিরভাগ নতুন অ্যাপ বাস্তবে যেভাবে তৈরি করা হয় তার সাথে সামঞ্জস্যপূর্ণ।:

  • strict এখন ডিফল্ট trueস্ট্রিক্ট মোড এখন আর ঐচ্ছিক কোনো বিলাসিতা নয়; এটিই এখন মূল ভিত্তি। আপনি যদি আগে নন-স্ট্রিক্ট আচরণ ব্যবহার করে থাকেন, তবে আপনাকে এটি স্পষ্টভাবে সেট করতে হবে। "strict": false (যদিও এর ফলে আপনি এক বড় ধরনের নিরাপত্তা পরীক্ষা থেকে বঞ্চিত হবেন)।
  • module এখন ডিফল্ট esnextযা থেকে বোঝা যায় যে, ESM হলো প্রধান মডিউল ফরম্যাট এবং এটি বান্ডলার ও আধুনিক নোডের সাথে সবচেয়ে ভালোভাবে কাজ করে।
  • target ডিফল্টরূপে বর্তমান ECMAScript বছর ব্যবহৃত হয় (যা বর্তমানে কার্যকরভাবে ES2025)।এটা স্বীকার করে যে, বেশিরভাগ ডেপ্লয়মেন্টই এভারগ্রিন এনভায়রনমেন্টকে লক্ষ্য করে করা হয় অথবা এমন একটি বান্ডলারের মাধ্যমে সম্পন্ন হয় যা একান্ত প্রয়োজনে আরও ডাউন-লেভেল করতে পারে।
  • noUncheckedSideEffectImports এখন true গতানুগতিক, যা আপনাকে শুধুমাত্র সাইড ইফেক্টের জন্য অন্তর্ভুক্ত করা ইম্পোর্টগুলিতে থাকা টাইপিংয়ের ভুল বা ভুল পাথ ধরতে সাহায্য করে।
  • libReplacement ডিফল্ট থেকে falseএর ফলে, কোনো প্রজেক্ট সুস্পষ্টভাবে বিশেষায়িত লাইব্রেরির আচরণগুলো বেছে না নেওয়া পর্যন্ত, বহু অতিরিক্ত ব্যর্থ মডিউল রেজোলিউশন এবং ওয়াচ ওভারহেড এড়ানো যায়।

এই নতুন ডিফল্টগুলোর কোনোটি যদি আপনার বিল্ডে সমস্যা তৈরি করে, তবে সেগুলোকে স্পষ্টভাবে ওভাররাইড করা যাবে। tsconfig.jsonকিন্তু উদ্দেশ্য হলো, নতুন প্রজেক্টগুলো যেন কোনো অতিরিক্ত কনফিগারেশন ছাড়াই স্বয়ংক্রিয়ভাবে সঠিক কাজটি করে।

rootDir এখন ডিফল্টরূপে কনফিগ ডিরেক্টরিতে সেট করা হয়

পূর্বে, যদি আপনি নির্দিষ্ট না করে থাকেন rootDirটাইপস্ক্রিপ্ট একটি সাধারণ উৎস রুট অনুমান করার চেষ্টা করেছিল প্রোগ্রামের সমস্ত নন-ডিক্লারেশন ফাইলের উপর ভিত্তি করে। এর ফলে প্রজেক্টের সীমানা নির্ধারণ করা কঠিন হয়ে পড়েছিল এবং 'emit'-কে কোথায় রুট করা উচিত, শুধু সেই সিদ্ধান্ত নেওয়ার জন্যই অনেক ফাইল পাথ স্ক্যান করার প্রয়োজন পড়ত।

টাইপস্ক্রিপ্ট ৬.০-তে, ডিফল্ট rootDir কেবলমাত্র ডিরেক্টরিটি ধারণ করে tsconfig.jsonপুরানো অনুমান আচরণটি শুধুমাত্র তখনই প্রযোজ্য হয় যখন আপনি চালান tsc কমান্ড লাইনে কোন ছাড়াই tsconfig সব সময়ে

এই পরিবর্তনের অর্থ হলো, যেসব প্রোজেক্টের সোর্স ফাইল কনফিগ ডিরেক্টরির চেয়েও গভীরে রয়েছে, সেগুলোকে স্পষ্টভাবে সেট করতে হবে। rootDirএকটি সাধারণ বিন্যাস হবে:

{
  "compilerOptions": {
    // ...
    "rootDir": "./src"
  },
  "include": 
}

যদি আপনার কনফিগারেশন উপরের ফাইলগুলিকে নির্দেশ করে tsconfig অবস্থান, আপনাকে প্রসারিত করতে হবে rootDir তদনুসারে, উদাহরণ স্বরূপ "rootDir": "../src" শেয়ার করা সোর্স ডিরেক্টরিগুলোর জন্য।

types এখন ডিফল্টরূপে একটি খালি অ্যারে থাকে

বাস্তব-জগতের প্রকল্পগুলোর জন্য এটিই সম্ভবত সবচেয়ে প্রভাবশালী পরিবর্তন।ঐতিহাসিকভাবে, যদি আপনি নির্দিষ্ট না করেন types in compilerOptionsTypeScript স্বয়ংক্রিয়ভাবে এর অধীনে থাকা সবকিছু অন্তর্ভুক্ত করবে node_modules/@typesসেটা সুবিধাজনক ছিল, কিন্তু ব্যয়বহুল এবং ভঙ্গুরও ছিল: আধুনিক রিপোজিটরিগুলো প্রায়শই শত শত ডেটা টেনে আনে। @types প্যাকেজগুলি পরোক্ষভাবে কাজ করে।

টাইপস্ক্রিপ্ট ৬.০-তে, types ডিফল্ট থেকে []যার অর্থ কোনো অ্যাম্বিয়েন্ট টাইপ প্যাকেজ স্বয়ংক্রিয়ভাবে লোড হয় না।এখন আপনি আপনার প্রয়োজনীয় গ্লোবাল এনভায়রনমেন্টগুলোতে স্পষ্টভাবে সম্মতি জানাতে পারেন, উদাহরণস্বরূপ:

{
  "compilerOptions": {
    "types": 
  }
}

এর ফলে কিছু প্রকল্পে নির্মাণের সময় ২০-৫০% পর্যন্ত কমে আসতে পারে।কারণ কম্পাইলারকে আর প্রতিটি ডিক্লারেশন ফাইলের মধ্যে দিয়ে যেতে হয় না @typesআপনি যদি সত্যিই আগের “সবকিছু লোড করার” আচরণটি চান, তাহলে আপনি নির্দিষ্ট করে দিতে পারেন:

{
  "compilerOptions": {
    "types": 
  }
}

যদি আপনি হঠাৎ “Cannot find name 'process'” বা “Cannot find module 'fs'”-এর মতো ত্রুটি দেখতে পানএটাই আপনার যোগ করার সংকেত। node (এবং আপনার নির্ভর করা অন্য যেকোনো টেস্ট/রানটাইম টাইপ) আপনার types অ্যারে।

অবমানিত: target: es5 এবং --downlevelIteration

ES5 টার্গেট করা এখন অপ্রচলিত।যেহেতু বহু বছর ধরে প্রায় সব প্রাসঙ্গিক ব্রাউজার ES2015+ ব্যবহার করছে এবং ইন্টারনেট এক্সপ্লোরার বন্ধ হয়ে গেছে, তাই টাইপস্ক্রিপ্টের অভ্যন্তরীণ জটিলতার কারণে ES5 আউটপুটকে আর উপযুক্ত বলে মনে করা হয় না। এখন থেকে সর্বনিম্ন সমর্থিত টার্গেট হলো ES2015। যদি আপনাকে সত্যিই ES5 ব্যবহার করতেই হয়, তবে আপনার TS সোর্স অথবা এর আউটপুটে একটি এক্সটার্নাল ট্রান্সপাইলার (যেমন Babel বা একটি বান্ডলার পাইপলাইন) ব্যবহার করার পরামর্শ দেওয়া হয়।

সার্জারির --downlevelIteration ফ্ল্যাগটিও অপ্রচলিত।কারণ এর একমাত্র অর্থপূর্ণ ব্যবহার ছিল ES5 টার্গেটের জন্য এমিট আচরণ সামঞ্জস্য করা। টাইপস্ক্রিপ্ট 6.0-এ, সেটিং downlevelIteration এরকম সব ক্ষেত্রে একটি ডেপ্রিকেশন এরর দেখা দেবে। আপনি যদি ES2015 বা তার নতুন সংস্করণ ব্যবহার করেন, তবে এই ফ্ল্যাগটির এমনিতেও কখনো কোনো প্রভাব ছিল না।

অবমানিত: --moduleResolution node এবং উত্তরাধিকার classic

সার্জারির node (ওরফে node10মডিউল রেজোলিউশন মোড অপ্রচলিতএটি নোড ১০-এর আচরণ অনুকরণ করলেও আধুনিক নোডের ইএসএম (ESM) এবং রেজোলিউশন সেম্যান্টিক্সের সাথে মেলে না। প্রজেক্টগুলোর হয় অন্য কোনোটিতে মাইগ্রেট করা উচিত। nodenext (সরাসরি নোড লক্ষ্যবস্তুগুলির জন্য) অথবা bundler (ওয়েব অ্যাপ বা Bun-এর মতো বান্ডলার-চালিত পরিবেশের জন্য)।

মূল moduleResolution: classic কৌশলও সরিয়ে ফেলা হয়েছেএটি ছিল টাইপস্ক্রিপ্টের নোড-পূর্ববর্তী রেজোলিউশনের গল্প। বর্তমানে, সমস্ত ব্যবহারিক পরিস্থিতি আরও ভালোভাবে সামাল দেয় এর দ্বারা। nodenext or bundlerতাই জটিলতা এবং বিশেষ পরিস্থিতিগুলো কমাতে ক্লাসিক পদ্ধতিটি বাদ দেওয়া হয়েছে।

অপ্রচলিত: AMD, UMD, SystemJS, এবং module: none

অনুসরণ module মানগুলি এখন অপ্রচলিত এবং কার্যত অসমর্থিত।:

  • amd
  • umd
  • systemjs
  • none

ESM-পূর্ব যুগে এই বিন্যাসগুলি অত্যন্ত গুরুত্বপূর্ণ ছিল।যখন ব্রাউজারগুলিতে নেটিভ মডিউল সাপোর্ট ছিল না এবং ডেভেলপাররা এই শূন্যস্থান পূরণের জন্য AMD, UMD, বা SystemJS-এর উপর নির্ভর করত। আজ, ESM এবং বান্ডলার বা ইম্পোর্ট ম্যাপ প্রায় সমস্ত বাস্তব ব্যবহারের ক্ষেত্র সামলে নেয়, এবং “কোনোটিই নয়” কথাটি কখনোই বিশেষভাবে সুনির্দিষ্ট ছিল না।

আপনি যদি এখনও এই লিগ্যাসি মডিউল ফরম্যাটগুলিকে টার্গেট করে থাকেনসুপারিশটি হলো, একটি ESM-নিঃসরণকারী টার্গেটের দিকে মাইগ্রেট করা এবং চূড়ান্ত প্যাকেজিংয়ের জন্য একটি বান্ডলার বা বিকল্প কম্পাইলারের উপর নির্ভর করা—অথবা একটি মাইগ্রেশন পরিকল্পনা তৈরি না হওয়া পর্যন্ত TypeScript 5.x-এ থেকে যাওয়া। এই পরিচ্ছন্নতার অংশ হিসেবে, পুরানো amd-module নির্দেশনাটিও বাতিল করা হয়েছে।

অবমানিত: baseUrl

সার্জারির baseUrl এই অপশনটি দীর্ঘদিন ধরে মডিউল রেজোলিউশনের এমন কিছু অদ্ভুত ও ডিবাগ-কঠিন আচরণের উৎস হয়ে আছে।অনেক প্রকল্পে এটিকে শুধুমাত্র একটি উপসর্গ হিসেবে ব্যবহার করা হতো paths এন্ট্রি, কিন্তু টাইপস্ক্রিপ্ট এটিকে একটি সাধারণ লুকআপ রুট হিসেবেও গণ্য করত, যার ফলে ইম্পোর্ট হতো যেমন "someModule" সংকল্প করতে src/someModule.js অপ্রত্যাশিতভাবে, যখন ডেভেলপারের একমাত্র উদ্দেশ্য ছিল কাস্টম অ্যালিয়াস সমর্থন করা, যেমন @app/*.

6.0 সালে baseUrl এটি অপ্রচলিত এবং লুকআপ রুট হিসেবে আর ব্যবহার করা হবে না।পাথ ম্যাপিংয়ের প্রয়োজন হয়নি baseUrl বেশ কিছুদিন ধরে, তাই প্রস্তাবিত স্থানান্তর হলো কেবল প্রিফিক্সটিকে প্রতিটির মধ্যে অন্তর্ভুক্ত করা। paths এন্ট্রি। উদাহরণস্বরূপ:

// Before
{
  "compilerOptions": {
    "baseUrl": "./src",
    "paths": {
      "@app/*": ,
      "@lib/*": 
    }
  }
}

// After
{
  "compilerOptions": {
    "paths": {
      "@app/*": ,
      "@lib/*": 
    }
  }
}

শুধুমাত্র বিরল ক্ষেত্রে যেখানে আপনি সত্যিই ব্যবহার করেছেন baseUrl একটি জেনেরিক লুকআপ রুট হিসাবে আপনাকে কি নিম্নলিখিতের মতো একটি সর্বজনীন পাথ ম্যাপিং ব্যবহার করে সেই আচরণটি পুনরুৎপাদন করতে হবে:

"paths": {
  "*": ,
  "@app/*": ,
  "@lib/*": 
}

বেশিরভাগ দলের জন্য, কেবল অপসারণ করা baseUrl এবং ইনলাইনিং প্রিফিক্স paths আরও স্পষ্ট এবং নিরাপদ হবে.

ইন্টারঅপ এবং কঠোরতা: esModuleInterop, allowSyntheticDefaultImports, এবং alwaysStrict

TypeScript 6.0 সেই ডিফল্ট ইন্টারঅপারেশন আচরণটিকেও অপরিবর্তিত রেখেছে, যা দীর্ঘদিন ধরে সুপারিশ করা হয়ে আসছিল।আপনি আর সেট করতে পারবেন না esModuleInterop or allowSyntheticDefaultImports থেকে falseপুরোনো প্রজেক্টগুলোতে যাতে কোনো সমস্যা না হয়, সেজন্য এই অপশনগুলো মূলত ঐচ্ছিক ছিল, কিন্তু বর্তমানে এগুলো বন্ধ রাখলে CommonJS এবং ESM একসাথে ব্যবহার করার সময় প্রায়শই সূক্ষ্ম রানটাইম সমস্যা দেখা দেয়।

ইন্টারঅপ সর্বদা সক্রিয় থাকলে, নির্দিষ্ট কিছু ইম্পোর্ট প্যাটার্ন আপডেট করার প্রয়োজন হতে পারে।। উদাহরণ স্বরূপ:

// Old style with esModuleInterop: false
import * as express from "express";

// New style with modern interop always on
import express from "express";

সার্জারির alwaysStrict ফ্ল্যাগও সেট করা যাবে না false আরTypeScript এখন সংরক্ষিত শব্দগুলোর ব্যবহারসহ সার্বিকভাবে JavaScript-এর স্ট্রিক্ট মোড সিম্যান্টিকস অনুসরণ করে। this আচরণ করুন। যদি আপনার কাছে সত্যিই পুরানো কোড থাকে যেখানে সংরক্ষিত শব্দ ব্যবহার করা হয়েছে যেমন await or static আইডেন্টিফায়ার হিসেবে, আপনাকে এগুলোর নাম পরিবর্তন করতে হবে।

অবমানিত: outFile, লিগ্যাসি নেমস্পেস module কীওয়ার্ড, এবং আমদানি asserts

সার্জারির --outFile 6.0 সংস্করণে এই অপশনটি সরিয়ে দেওয়া হয়েছে।একাধিক ইনপুটকে একটিমাত্র JS বান্ডেলে একত্রিত করার কাজটি Webpack, Rollup, esbuild, Vite, Parcel বা এই জাতীয় টুলগুলো ভালোভাবে সামলাতে পারে। TypeScript এখন বান্ডলার হওয়ার চেষ্টা না করে, টাইপ চেকিং এবং ডিক্লারেশন এমিটের ওপর আরও বেশি জোর দিচ্ছে।

ঐতিহ্যগত ব্যবহার module নেমস্পেস ঘোষণা করা এখন একটি হার্ড এরর।প্রাথমিক টাইপস্ক্রিপ্টে যা অনুমোদিত ছিল:

module Foo {
  export const bar = 10;
}

আধুনিক, সমর্থিত সিনট্যাক্স ব্যবহার করে namespace:

namespace Foo {
  export const bar = 10;
}

ভবিষ্যতে সম্ভাব্য ECMAScript-এর সাথে সংঘর্ষ এড়ানোর জন্য এই পরিবর্তনটি প্রয়োজনীয়। module ব্লকঅ্যাম্বিয়েন্ট মডিউল ঘোষণা যেমন declare module "some-module" { ... } সম্পূর্ণরূপে সমর্থিত থাকবে।

আমদানি অ্যাসারশন ব্যবহার করে asserts এছাড়াও অপ্রচলিতকারণ অন্তর্নিহিত প্রস্তাবটি ব্যবহার করে ইম্পোর্ট অ্যাট্রিবিউটে বিকশিত হয়েছিল withকোডটি দেখতে এইরকম:

import blob from "./data.json" asserts { type: "json" };

নতুন ফর্মে স্থানান্তরিত করা উচিত:

import blob from "./data.json" with { type: "json" };

অবমানিত: no-default-lib tsconfig ব্যবহার করে রেফারেন্স এবং কমান্ড-লাইন ফাইলের তালিকা

সার্জারির /// <reference no-default-lib="true" /> নির্দেশিকাটি আর সমর্থিত নয়এটি প্রায়শই ভুল বোঝা হতো। যদি ডিফল্ট লাইব্রেরি বাদ দেওয়ার প্রয়োজন হয়, তাহলে ব্যবহার করুন --noLib or --libReplacement পরিবর্তে, যা কনফিগারেশন স্তরে উদ্দেশ্যকে আরও স্পষ্টভাবে প্রকাশ করে।

বিভ্রান্তির আরেকটি দীর্ঘদিনের উৎস হলো কীভাবে tsc সুস্পষ্ট ফাইল আর্গুমেন্টগুলিকে বিবেচনা করে যখন একটি tsconfig.json উপস্থিতপূর্বে, দৌড়ানো tsc foo.ts এই ধরনের ডিরেক্টরিতে কনফিগারেশন ফাইলটি নীরবে উপেক্ষা করা হবে। 6.0 সংস্করণে, এই পরিস্থিতিতে একটি সুস্পষ্ট ত্রুটি দেখা দেয়:

error TS5112: tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error.

যদি আপনি সত্যিই কনফিগারেশন এড়িয়ে গিয়ে ডিফল্ট সেটিংস সহ শুধু একটি ফাইল কম্পাইল করতে চান, আপনি এখন ব্যবহার করতে পারেন tsc --ignoreConfig foo.ts সেই অভিপ্রায়টি স্পষ্ট করার জন্য।

টাইপস্ক্রিপ্ট ৭.০-এর জন্য প্রস্তুতি চলছে

টাইপস্ক্রিপ্ট ৬.০-তে সমস্ত বৈশিষ্ট্য অন্তর্ভুক্ত করা হয়েছে এবং এটি মূলত স্থিতিশীলকরণ পর্যায়ে রয়েছে।এখন থেকে সর্বসাধারণের জন্য উপলব্ধ হওয়া পর্যন্ত, টিম শুধুমাত্র গুরুতর বাগ ফিক্সের আশা করছে। নাইটলি বিল্ড নিয়মিতভাবে প্রকাশ করা হয়, এবং টিম আসন্ন নেটিভ (গো-ভিত্তিক) টাইপস্ক্রিপ্ট ৭.০-এর নাইটলি ভার্সনও সরবরাহ করে, সাথে নতুন ইঞ্জিনটি নিয়ে পরীক্ষা-নিরীক্ষার জন্য একটি ডেডিকেটেড ভিএস কোড এক্সটেনশনও থাকে।

রোডম্যাপটি ইচ্ছাকৃতভাবে সংক্ষিপ্ত রাখা হয়েছে: ৬.০-এর পরপরই ৭.০ আসার কথা রয়েছে।সুতরাং, আপগ্রেডের ঝামেলা এবং মাইগ্রেশন সংক্রান্ত সমস্যার প্রতিক্রিয়া জানানোর সময়কাল সংক্ষিপ্ত হবে। আপনি যদি 6.0-এ ডেপ্রিকেশন সতর্কতা দেখতে পান, তবে 7.0 সংস্করণটি বিষয়টি জোর করে চাপিয়ে দেওয়া পর্যন্ত অপেক্ষা না করে, এখনই সেগুলোর সমাধান করার জন্য জোরালো পরামর্শ দেওয়া হচ্ছে।

বেশিরভাগ দলের জন্য বাস্তব কর্মপ্রবাহটি দেখতে এইরকমTypeScript 6.0 RC-তে আপগ্রেড করুন, আপনার সমস্যা সমাধান করুন types এবং rootDirঠিকানার অপ্রচলিতকরণ (অথবা সাময়িকভাবে সেগুলোকে আড়ালে রাখা) "ignoreDeprecations": "6.0" যখন আপনি পুনরাবৃত্তি করেন), এবং সাথে চালান --stableTypeOrdering যদি আপনার আউটপুট তুলনা করার প্রয়োজন হয় অথবা 7.0-এর ডিটারমিনিস্টিক অর্ডারিং-এর জন্য CI পাইপলাইন প্রস্তুত করতে হয়। একবার সেটি সেট হয়ে গেলে, Go-ভিত্তিক কম্পাইলারে পরিবর্তনটি একটি বড় ধরনের পরিবর্তন না হয়ে বরং পারফরম্যান্স আপগ্রেডের মতো মনে হবে।

সব মিলিয়ে, TypeScript 6.0 RC মূলত চাকচিক্যময় সিনট্যাক্সের চেয়ে প্রেক্ষাপট প্রস্তুত করার ওপর বেশি গুরুত্ব দেয়।৭.০ সংস্করণে রয়েছে নেটিভ গতি, আরও পরিচ্ছন্ন কনফিগারেশন, আধুনিক ডিফল্ট সেটিংস এবং টেম্পোরাল ও ES2025 বিল্ট-ইন-এর মতো স্ট্যান্ডার্ডাইজড এপিআই, যা দৈনন্দিন কোডিংকে আরও সহজ করে তোলে। আপনি যদি এখনই এটি গ্রহণ করেন, এর অপ্রয়োজনীয় অংশগুলো ঠিক করেন এবং নতুন ডিফল্ট সেটিংসগুলো ব্যবহার করতে শুরু করেন, তাহলে নেটিভ কম্পাইলার চালু হলে আপনি আরও সুবিধাজনক অবস্থানে থাকবেন।

সফ্টওয়্যার সংবাদ
সম্পর্কিত নিবন্ধ:
সর্বশেষ সফটওয়্যার ডেভেলপমেন্ট এবং উদীয়মান প্রযুক্তিগত প্রবণতা
সম্পর্কিত পোস্ট: