TypeScript আধুনিক জাভাস্ক্রিপ্ট বিকাশের জন্য আদর্শ হয়ে উঠেছে। 2026 সালে, 80% এর বেশি নতুন জাভাস্ক্রিপ্ট প্রকল্প টাইপস্ক্রিপ্ট ব্যবহার করে। এই সম্পূর্ণ নির্দেশিকাটি মৌলিক ধরনের থেকে শুরু করে উন্নত জেনেরিক, ডেকোরেটর এবং উৎপাদনের ধরণ পর্যন্ত সবকিছুই কভার করে।
📋 Table of Contents
কেন 2026 সালে টাইপস্ক্রিপ্ট?
জাভাস্ক্রিপ্টের গতিশীল প্রকৃতি রানটাইম ত্রুটির কারণ হয় যা টাইপস্ক্রিপ্ট কম্পাইলের সময় ক্যাচ করে। সুবিধাগুলি পরিষ্কার:
- তাড়াতাড়ি বাগ ধরা— কম্পাইলের সময় ত্রুটি টাইপ করুন, উৎপাদনে নয়
- আরও ভালো টুলিং— ভিএস কোডে স্বয়ংসম্পূর্ণ, রিফ্যাক্টরিং এবং নেভিগেশন
- স্ব-ডকুমেন্টিং কোড— প্রকারগুলি ইনলাইন ডকুমেন্টেশন হিসাবে কাজ করে
- বড় মাপের আত্মবিশ্বাস– হাজার হাজার ফাইল জুড়ে নিরাপদ রিফ্যাক্টরিং
ইনস্টলেশন এবং সেটআপ
বিশ্বব্যাপী বা একটি dev নির্ভরতা হিসাবে TypeScript ইনস্টল করুন:
# Install TypeScript
npm install -g typescript
# Or as dev dependency
npm install --save-dev typescript
# Check version
tsc --version
# Initialize tsconfig
tsc --init
tsconfig.json সেরা অনুশীলন
একটি উত্পাদন প্রস্তুতtsconfig.json2026 এর জন্য:
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "bundler",
"strict": true,
"noUncheckedIndexedAccess": true,
"exactOptionalPropertyTypes": true,
"noImplicitOverride": true,
"lib": ["ES2022", "DOM"],
"outDir": "./dist",
"rootDir": "./src",
"declaration": true,
"sourceMap": true,
"esModuleInterop": true,
"skipLibCheck": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
মৌলিক প্রকার
টাইপস্ক্রিপ্টের টাইপ সিস্টেম আদিম দিয়ে শুরু হয় এবং তৈরি হয়:
// Primitives
const name: string = "Alice";
const age: number = 30;
const active: boolean = true;
const nothing: null = null;
const unknown: undefined = undefined;
// Arrays
const scores: number[] = [95, 87, 92];
const tags: Array<string> = ["ts", "js", "node"];
// Tuples (fixed-length arrays with known types)
const point: [number, number] = [10, 20];
const entry: [string, number] = ["age", 30];
// Union types
let id: string | number = "user_123";
id = 456; // also valid
// Literal types
type Direction = "north" | "south" | "east" | "west";
const dir: Direction = "north";
// any, unknown, never
const userInput: unknown = getUserInput();
if (typeof userInput === "string") {
console.log(userInput.toUpperCase()); // type narrowed to string
}
ইন্টারফেস বনাম প্রকার
উভয় বস্তুর আকার সংজ্ঞায়িত করে, কিন্তু মূল পার্থক্য সহ:
// Interface — can be merged (declaration merging)
interface User {
id: number;
name: string;
email?: string; // optional
}
// Extend interface
interface AdminUser extends User {
role: "admin" | "superadmin";
permissions: string[];
}
// Type alias — more flexible, supports unions and intersections
type ApiResponse<T> = {
data: T;
error: string | null;
status: number;
};
// Intersection type
type AuthUser = User & { token: string };
// Prefer interface for object shapes, type for unions/intersections
const user: AdminUser = {
id: 1,
name: "Alice",
role: "admin",
permissions: ["read", "write"]
};
জেনেরিক
টাইপ-নিরাপদ থাকার সময় জেনেরিক কোডকে পুনরায় ব্যবহারযোগ্য করে তোলে:
// Generic function
function first<T>(arr: T[]): T | undefined {
return arr[0];
}
const num = first([1, 2, 3]); // type: number | undefined
const str = first(["a", "b"]); // type: string | undefined
// Generic with constraints
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const user = { id: 1, name: "Alice", age: 30 };
const name = getProperty(user, "name"); // type: string
const id = getProperty(user, "id"); // type: number
// Generic interface
interface Repository<T> {
findById(id: number): Promise<T | null>;
findAll(): Promise<T[]>;
create(item: Omit<T, "id">): Promise<T>;
update(id: number, item: Partial<T>): Promise<T>;
delete(id: number): Promise<void>;
}
// Generic class
class Stack<T> {
private items: T[] = [];
push(item: T): void { this.items.push(item); }
pop(): T | undefined { return this.items.pop(); }
peek(): T | undefined { return this.items[this.items.length - 1]; }
isEmpty(): boolean { return this.items.length === 0; }
}
const stack = new Stack<number>();
stack.push(1);
stack.push(2);
console.log(stack.pop()); // 2
ইউটিলিটি প্রকার
টাইপস্ক্রিপ্ট শক্তিশালী বিল্ট-ইন ইউটিলিটি ধরনের সহ জাহাজগুলি:
interface Product {
id: number;
name: string;
price: number;
description: string;
inStock: boolean;
}
// Partial — all fields optional
type ProductDraft = Partial<Product>;
// Required — all fields required
type FullProduct = Required<Product>;
// Pick — select specific fields
type ProductSummary = Pick<Product, "id" | "name" | "price">;
// Omit — exclude fields
type NewProduct = Omit<Product, "id">;
// Readonly — prevent mutation
type ImmutableProduct = Readonly<Product>;
// Record — map type
type CategoryMap = Record<string, Product[]>;
// ReturnType — extract function return type
async function fetchUser() {
return { id: 1, name: "Alice", email: "alice@example.com" };
}
type User = Awaited<ReturnType<typeof fetchUser>>;
// Parameters — extract function parameters
function createOrder(userId: number, items: string[], total: number) {}
type OrderParams = Parameters<typeof createOrder>;
উন্নত নিদর্শন: শর্তাধীন প্রকার
// Conditional type
type IsArray<T> = T extends any[] ? true : false;
type A = IsArray<string[]>; // true
type B = IsArray<string>; // false
// Infer keyword
type UnpackArray<T> = T extends (infer U)[] ? U : T;
type Unpacked = UnpackArray<string[]>; // string
type NotArray = UnpackArray<number>; // number
// Mapped types
type Optional<T> = {
[K in keyof T]?: T[K];
};
// Template literal types (TypeScript 4.1+)
type EventName<T extends string> = `on${Capitalize<T>}`;
type ClickEvent = EventName<"click">; // "onClick"
type FocusEvent = EventName<"focus">; // "onFocus"
// Discriminated unions
type Result<T> =
| { success: true; data: T }
| { success: false; error: string };
function processResult<T>(result: Result<T>): T {
if (result.success) {
return result.data; // TypeScript knows this is T
}
throw new Error(result.error); // TypeScript knows error is string
}
প্রতিক্রিয়া সহ টাইপস্ক্রিপ্ট
import React, { useState, useCallback, FC } from "react";
interface ButtonProps {
label: string;
onClick: () => void;
variant?: "primary" | "secondary" | "danger";
disabled?: boolean;
children?: React.ReactNode;
}
const Button: FC<ButtonProps> = ({
label,
onClick,
variant = "primary",
disabled = false,
children
}) => {
return (
<button
className={`btn btn-${variant}`}
onClick={onClick}
disabled={disabled}
>
{children ?? label}
</button>
);
};
// Generic component
interface ListProps<T> {
items: T[];
renderItem: (item: T, index: number) => React.ReactNode;
keyExtractor: (item: T) => string | number;
}
function List<T>({ items, renderItem, keyExtractor }: ListProps<T>) {
return (
<ul>
{items.map((item, index) => (
<li key={keyExtractor(item)}>{renderItem(item, index)}</li>
))}
</ul>
);
}
// Custom hook with types
function useLocalStorage<T>(key: string, initialValue: T) {
const [value, setValue] = useState<T>(() => {
const stored = localStorage.getItem(key);
return stored ? JSON.parse(stored) : initialValue;
});
const setStoredValue = useCallback((newValue: T) => {
setValue(newValue);
localStorage.setItem(key, JSON.stringify(newValue));
}, [key]);
return [value, setStoredValue] as const;
}
টাইপস্ক্রিপ্ট ডেকোরেটরস (2026)
TypeScript 5.0+ স্টেজ 3 ডেকোরেটরকে সমর্থন করে:
// Class decorator
function singleton<T extends { new(...args: any[]): {} }>(constructor: T) {
let instance: T;
return class extends constructor {
constructor(...args: any[]) {
if (instance) return instance;
super(...args);
instance = this as any;
}
};
}
// Method decorator — log execution time
function measure(_target: any, key: string, descriptor: PropertyDescriptor) {
const original = descriptor.value;
descriptor.value = async function (...args: any[]) {
const start = performance.now();
const result = await original.apply(this, args);
const duration = performance.now() - start;
console.log(`${key} took ${duration.toFixed(2)}ms`);
return result;
};
return descriptor;
}
class UserService {
@measure
async fetchUsers(): Promise<User[]> {
const r = await fetch("/api/users");
return r.json();
}
}
কঠোর মোড চেকলিস্ট
সর্বাধিক ধরনের নিরাপত্তার জন্য এই কম্পাইলার বিকল্পগুলি সক্ষম করুন:
strict: true– সমস্ত কঠোর চেক সক্ষম করেnoUncheckedIndexedAccess: true— অ্যারে অ্যাক্সেস রিটার্নT | undefinedexactOptionalPropertyTypes: true—undefinedঐচ্ছিকভাবে বরাদ্দযোগ্য নয়noImplicitOverride: true– ব্যবহার করতে হবেoverrideকীওয়ার্ডnoPropertyAccessFromIndexSignature: true— সূচক সিগগুলির জন্য বন্ধনী স্বরলিপি ব্যবহার করুন
2026 সালে টাইপস্ক্রিপ্ট টুলিং
- বায়োম— দ্রুততম লিন্টার + ফরম্যাটার, টাইপস্ক্রিপ্ট-নেটিভ
- tsx– কম্পাইল না করে সরাসরি টাইপস্ক্রিপ্ট ফাইল চালান
- tsupটাইপস্ক্রিপ্ট লাইব্রেরির জন্য শূন্য-কনফিগার বান্ডলার
- ভিটেস্ট— নেটিভ ESM-এর সাথে টাইপস্ক্রিপ্ট-প্রথম পরীক্ষা
- টিআরপিসি– ফুল-স্ট্যাক অ্যাপের জন্য এন্ড-টু-এন্ড টাইপ নিরাপত্তা
মূল গ্রহণ
2026 সালে TypeScript পরিপক্ক, দ্রুত এবং পেশাদার জাভাস্ক্রিপ্ট বিকাশের জন্য প্রয়োজনীয়। দিয়ে শুরু করুনstrict: true, বস্তুর আকারের জন্য ইন্টারফেস ব্যবহার করুন, ইউটিলিটি প্রকারের উপর ঝুঁকুন এবং পুনঃব্যবহারযোগ্য কোডের জন্য লিভারেজ জেনেরিক। টুলিং ইকোসিস্টেম কখনও ভাল ছিল না.
🔗 Share this article
✍️ Leave a Comment