এই lesson ধরে নেয় basic TypeScript সিনট্যাক্স ইতিমধ্যে পরিচিত — type, interface, generic — আর specifically একটা React component type করার unique pattern-এ ফোকাস করে। একটা .tsx file extension (.jsx-এর বদলে) TypeScript compiler-কে বলে একটা file JSX ধারণ করে।
interface ButtonProps {
label: string
onClick: () => void
disabled?: boolean // ? এই prop-কে optional বানায়
}
function Button({ label, onClick, disabled }: ButtonProps) {
return (
<button onClick={onClick} disabled={disabled}>
{label}
</button>
)
}React-এর built-in ReactNode type JSX children হিসেবে বৈধ যেকোনো কিছু কভার করে — টেক্সট, element, fragment, বা একদম কিছু না।
import type { ReactNode } from 'react'
interface CardProps {
title: string
children: ReactNode
}
function Card({ title, children }: CardProps) {
return (
<div className="card">
<h3>{title}</h3>
{children}
</div>
)
}TypeScript সাধারণত initial value থেকে type infer করে — একটা explicit type argument শুধু তখন দরকার যখন initial value variable-টা যা যা state ধরতে পারে তার সবটা বর্ণনা করে না।
const [count, setCount] = useState(0) // number হিসেবে infer করা
const [name, setName] = useState('') // string হিসেবে infer করা
// একটা explicit type দরকার — null দিয়ে শুরু, কিন্তু পরে একটা User ধরবে
const [user, setUser] = useState<User | null>(null)React React. দিয়ে prefix করা DOM event-এর typed version দেয় — event.target তখন সঠিকভাবে type করা থাকে, any হওয়ার বদলে।
function SearchBox() {
const [query, setQuery] = useState('')
function handleChange(event: React.ChangeEvent<HTMLInputElement>) {
setQuery(event.target.value)
}
return <input value={query} onChange={handleChange} />
}function TextInput() {
const inputRef = useRef<HTMLInputElement>(null)
function focus() {
inputRef.current?.focus() // ?. কারণ এটা null দিয়ে শুরু হয়
}
return <input ref={inputRef} />
}| কী | কীভাবে type করবেন |
|---|---|
| Props | একটা interface, function-এর parameter-এ destructure করা |
| children | ReactNode type |
| useState | সাধারণত infer করা; initial value সম্ভাব্য প্রতিটা state কভার না করলে useState |
| Event handler | React.ChangeEvent |
| DOM element-এ useRef | useRef |
একটা project আগে থেকেই typed শুরু করা
একটা React project scaffold করা বেশিরভাগ tooling (Vite সহ) সরাসরি একটা TypeScript template দেয় — প্রথম দিন থেকেই এটা দিয়ে একটা নতুন project শুরু করা পরে বিদ্যমান JavaScript-এ type retrofit করা এড়ায়।