DEV Community

Ruhul Amin Sujon
Ruhul Amin Sujon

Posted on

TypeScript A-to-Z Roadmap/Syllabus দিলাম, যা Beginner Intermediate Advanced Expert লেভেল পর্যন্ত কভার করবে।

যেহেতু তুমি ইতিমধ্যে JavaScript জানো, তাই TypeScript শেখার জন্য তোমাকে JavaScript-এর বেসিকগুলো আবার শেখার দরকার নেই। বরং TypeScript-এর Type System, Advanced Types, Generics, OOP Features, Utility Types, এবং Framework Integration-এর উপর ফোকাস করা উচিত।

নিচে আমি TypeScript A-to-Z Roadmap/Syllabus দিলাম, যা Beginner → Intermediate → Advanced → Expert লেভেল পর্যন্ত কভার করবে।


Module 1: TypeScript Introduction

TypeScript কী?

TypeScript হলো JavaScript-এর Superset।

JavaScript-এর সব কোড TypeScript-এ চলে, কিন্তু TypeScript অতিরিক্ত Type Safety দেয়।

JavaScript

let name = "Ruhul";
name = 100;
Enter fullscreen mode Exit fullscreen mode

এখানে কোনো Error নেই।


TypeScript

let name: string = "Ruhul";

name = 100;
Enter fullscreen mode Exit fullscreen mode

Output:

Type 'number' is not assignable to type 'string'
Enter fullscreen mode Exit fullscreen mode

TypeScript Installation

Global Install

npm install -g typescript
Enter fullscreen mode Exit fullscreen mode

Check version

tsc -v
Enter fullscreen mode Exit fullscreen mode

Compile TS

tsc app.ts
Enter fullscreen mode Exit fullscreen mode

Generate:

app.js
Enter fullscreen mode Exit fullscreen mode

Module 2: Basic Types


String

let name: string = "Ruhul";
Enter fullscreen mode Exit fullscreen mode

Number

let age: number = 25;
Enter fullscreen mode Exit fullscreen mode

Boolean

let isActive: boolean = true;
Enter fullscreen mode Exit fullscreen mode

Array

let numbers: number[] = [1,2,3];
Enter fullscreen mode Exit fullscreen mode

অথবা

let numbers: Array<number> = [1,2,3];
Enter fullscreen mode Exit fullscreen mode

Object

let user: {
    name: string;
    age: number;
};
Enter fullscreen mode Exit fullscreen mode

Tuple

নির্দিষ্ট Index-এর জন্য নির্দিষ্ট Type।

let person: [string, number];

person = ["Ruhul", 25];
Enter fullscreen mode Exit fullscreen mode

Enum

enum Status {
    Pending,
    Approved,
    Rejected
}

let status = Status.Approved;
Enter fullscreen mode Exit fullscreen mode

Module 3: Type Inference

TypeScript অনেক সময় নিজেই Type বুঝে নেয়।

let name = "Ruhul";
Enter fullscreen mode Exit fullscreen mode

Automatically:

string
Enter fullscreen mode Exit fullscreen mode

Explicit Type

let name: string = "Ruhul";
Enter fullscreen mode Exit fullscreen mode

Module 4: Any, Unknown, Never


Any

let value: any;

value = "Hello";
value = 100;
value = true;
Enter fullscreen mode Exit fullscreen mode

সব কিছু Assign করা যায়।


Unknown

let value: unknown;

value = "Hello";
Enter fullscreen mode Exit fullscreen mode

Use করার আগে Type Check করতে হবে।

if(typeof value === "string"){
    console.log(value.toUpperCase());
}
Enter fullscreen mode Exit fullscreen mode

Never

function throwError(): never {
    throw new Error("Error");
}
Enter fullscreen mode Exit fullscreen mode

Module 5: Functions


Function Parameter Type

function sum(a:number,b:number):number{
    return a+b;
}
Enter fullscreen mode Exit fullscreen mode

Optional Parameter

function greet(name?:string){
    console.log(name);
}
Enter fullscreen mode Exit fullscreen mode

Default Parameter

function greet(name:string="Guest"){
    console.log(name);
}
Enter fullscreen mode Exit fullscreen mode

Rest Parameter

function total(...nums:number[]){
    return nums.reduce((a,b)=>a+b);
}
Enter fullscreen mode Exit fullscreen mode

Module 6: Union & Intersection


Union Type

let value:string | number;

value = "Hello";
value = 100;
Enter fullscreen mode Exit fullscreen mode

Function Example

function print(value:string | number){
    console.log(value);
}
Enter fullscreen mode Exit fullscreen mode

Intersection Type

type User={
    name:string;
}

type Admin={
    role:string;
}

type SuperAdmin = User & Admin;
Enter fullscreen mode Exit fullscreen mode

Module 7: Type Alias

type User = {
    name:string;
    age:number;
}
Enter fullscreen mode Exit fullscreen mode

Use

const user:User = {
    name:"Ruhul",
    age:25
}
Enter fullscreen mode Exit fullscreen mode

Module 8: Interface

interface User {
    name:string;
    age:number;
}
Enter fullscreen mode Exit fullscreen mode

Extend Interface

interface User {
    name:string;
}

interface Admin extends User {
    role:string;
}
Enter fullscreen mode Exit fullscreen mode

Module 9: Type vs Interface

Type:

type User = {}
Enter fullscreen mode Exit fullscreen mode

Interface:

interface User {}
Enter fullscreen mode Exit fullscreen mode

Interview Question

কখন Type ব্যবহার করবে?

  • Union
  • Intersection

কখন Interface ব্যবহার করবে?

  • Object Shape
  • OOP Design

Module 10: Object Oriented Programming


Class

class User{
    name:string;

    constructor(name:string){
        this.name=name;
    }
}
Enter fullscreen mode Exit fullscreen mode

Access Modifier

Public

public name:string;
Enter fullscreen mode Exit fullscreen mode

Private

private password:string;
Enter fullscreen mode Exit fullscreen mode

Protected

protected email:string;
Enter fullscreen mode Exit fullscreen mode

Readonly

readonly id:number;
Enter fullscreen mode Exit fullscreen mode

Module 11: Inheritance

class User{
    name:string;

    constructor(name:string){
        this.name=name;
    }
}

class Admin extends User{
    role:string;

    constructor(name:string, role:string){
        super(name);
        this.role=role;
    }
}
Enter fullscreen mode Exit fullscreen mode

Module 12: Abstract Class

abstract class Animal{
    abstract sound():void;
}
Enter fullscreen mode Exit fullscreen mode

class Dog extends Animal{
    sound(){
        console.log("Bark");
    }
}
Enter fullscreen mode Exit fullscreen mode

Module 13: Generics

সবচেয়ে গুরুত্বপূর্ণ Topic।


Without Generic

function getData(data:string){
    return data;
}
Enter fullscreen mode Exit fullscreen mode

Generic

function getData<T>(data:T):T{
    return data;
}
Enter fullscreen mode Exit fullscreen mode

Use

getData<string>("Hello");

getData<number>(100);
Enter fullscreen mode Exit fullscreen mode

Generic Array

let numbers:Array<number>;
Enter fullscreen mode Exit fullscreen mode

Generic Interface

interface ApiResponse<T>{
    data:T;
    success:boolean;
}
Enter fullscreen mode Exit fullscreen mode

Module 14: Generic Constraints

function getLength<T extends {length:number}>
(value:T){
    return value.length;
}
Enter fullscreen mode Exit fullscreen mode

getLength("Hello");
Enter fullscreen mode Exit fullscreen mode

Module 15: keyof

type User = {
    name:string;
    age:number;
}
Enter fullscreen mode Exit fullscreen mode

type UserKeys = keyof User;
Enter fullscreen mode Exit fullscreen mode

Result:

"name" | "age"
Enter fullscreen mode Exit fullscreen mode

Module 16: typeof

const user = {
    name:"Ruhul"
}
Enter fullscreen mode Exit fullscreen mode

type User = typeof user;
Enter fullscreen mode Exit fullscreen mode

Module 17: Mapped Types

type User = {
    name:string;
    age:number;
}
Enter fullscreen mode Exit fullscreen mode

type ReadOnlyUser = {
    readonly [K in keyof User]: User[K]
}
Enter fullscreen mode Exit fullscreen mode

Module 18: Utility Types


Partial

Partial<User>
Enter fullscreen mode Exit fullscreen mode

সব Property Optional।


Required

Required<User>
Enter fullscreen mode Exit fullscreen mode

সব Required।


Pick

Pick<User,"name">
Enter fullscreen mode Exit fullscreen mode

Omit

Omit<User,"age">
Enter fullscreen mode Exit fullscreen mode

Record

Record<string,string>
Enter fullscreen mode Exit fullscreen mode

Module 19: Type Narrowing

function print(value:string|number){

    if(typeof value==="string"){
        console.log(value.toUpperCase());
    }

}
Enter fullscreen mode Exit fullscreen mode

Module 20: Type Assertion

let value = document.getElementById("app") as HTMLDivElement;
Enter fullscreen mode Exit fullscreen mode

Module 21: Modules

Export

export const name="Ruhul";
Enter fullscreen mode Exit fullscreen mode

Import

import {name} from "./user";
Enter fullscreen mode Exit fullscreen mode

Module 22: Namespaces

namespace App{
    export const name="Ruhul";
}
Enter fullscreen mode Exit fullscreen mode

Module 23: Decorators

function Logger(target:any){
    console.log(target);
}

@Logger
class User{}
Enter fullscreen mode Exit fullscreen mode

Module 24: Declaration Files

declare const API_URL:string;
Enter fullscreen mode Exit fullscreen mode

Module 25: tsconfig.json

Generate

tsc --init
Enter fullscreen mode Exit fullscreen mode

Important Settings

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ESNext",
    "strict": true,
    "outDir": "./dist"
  }
}
Enter fullscreen mode Exit fullscreen mode

Module 26: Advanced Types

Conditional Types

type Check<T> =
T extends string
? string
: number;
Enter fullscreen mode Exit fullscreen mode

Infer

type ReturnTypeCustom<T> =
T extends (...args:any[])=>infer R
? R
: never;
Enter fullscreen mode Exit fullscreen mode

Module 27: TypeScript with DOM

const btn =
document.querySelector("button");
Enter fullscreen mode Exit fullscreen mode

btn?.addEventListener("click",()=>{
    console.log("Clicked");
});
Enter fullscreen mode Exit fullscreen mode

Module 28: TypeScript with API

interface User{
    id:number;
    name:string;
}
Enter fullscreen mode Exit fullscreen mode

async function getUsers(){

    const response =
    await fetch('/users');

    const users:User[] =
    await response.json();

    return users;
}
Enter fullscreen mode Exit fullscreen mode

Module 29: TypeScript with Node.js

import express from "express";
Enter fullscreen mode Exit fullscreen mode

const app = express();
Enter fullscreen mode Exit fullscreen mode

Module 30: TypeScript with React

Component Props

type Props={
    name:string;
}
Enter fullscreen mode Exit fullscreen mode

function User({name}:Props){
    return <h1>{name}</h1>;
}
Enter fullscreen mode Exit fullscreen mode

Module 31: TypeScript Interview Questions

শিখে রাখবে:

  • any vs unknown
  • type vs interface
  • union vs intersection
  • generic কী
  • keyof কী
  • mapped types কী
  • utility types কী
  • type inference কী
  • declaration merging কী
  • never type কী

Recommended Learning Order (সবচেয়ে ভালো)

Phase 1 (Foundation)

  • Introduction
  • Basic Types
  • Functions
  • Array
  • Object
  • Union
  • Type Alias
  • Interface

Phase 2 (Intermediate)

  • OOP
  • Generics
  • keyof
  • typeof
  • Type Narrowing

Phase 3 (Advanced)

  • Utility Types
  • Mapped Types
  • Conditional Types
  • Infer
  • Decorators

Phase 4 (Real Project)

  • React + TypeScript
  • Node + TypeScript
  • Express + TypeScript
  • API Typing
  • Database Typing

যদি লক্ষ্য Laravel Developer থেকে Full Stack Developer হওয়া হয়, তাহলে শেখার ক্রম হতে পারে:

JavaScript → TypeScript → React → Next.js → Node.js/Express → Full Stack TypeScript Project

এভাবে TypeScript শেখার পর React/Next.js-এ কাজ করা অনেক সহজ হবে।

Top comments (0)