انواع ویژه (Special Types)
اینجا با «انواع ویژه» آشنا می شویم. نوع ویژه یعنی نوع های خاص سیستم TypeScript. این نوع ها مثل ابزارهای کمکی هستند. پس خطاها زودتر پیدا می شوند.
any؛ آزاد اما خطرناک
نوع any یعنی «هرچیزی». کامپایلر دیگر چک نمی کند. سریع است اما ریسکی است.
let u: boolean = true;
u = "string"; // Error: 'string' به 'boolean' نمی خورد.
Math.round(u); // Error: آرگومان باید number باشد.
let v: any = true;
v = "string"; // اوکی؛ چون 'any' است.
Math.round(v); // اوکی؛ چون 'any' است.
هشدار: any را کم استفاده کن. زیرا ایمنی نوع را خاموش می کند.
unknown؛ انعطافِ ایمن
unknown شبیه any است؛ اما اول باید بررسی نوع انجام دهی. سپس استفاده کن.
let w: unknown = 1;
w = "string";
w = {
runANonExistentMethod: (): void => {
console.log("I think therefore I am");
}
} as { runANonExistentMethod: () => void };
// w.runANonExistentMethod(); // Error: نوع 'unknown' است.
if (typeof w === 'object' && w !== null) {
(w as { runANonExistentMethod: Function }).runANonExistentMethod();
}
function processValue(value: unknown): void {
if (typeof value === 'string') {
console.log(value.toUpperCase());
} else if (Array.isArray(value)) {
console.log(value.length);
}
}
never؛ چیزی که هرگز رخ نمی دهد
never یعنی مقدار هرگز اتفاق نمی افتد. مثلاً تابعی که همیشه خطا می دهد.
function throwError(message: string): never {
throw new Error(message);
}
type Shape = Circle | Square | Triangle;
function getArea(shape: Shape): number {
switch (shape.kind) {
case 'circle': {
return Math.PI * shape.radius ** 2;
}
case 'square': {
return shape.sideLength ** 2;
}
default: {
const _exhaustiveCheck: never = shape;
return _exhaustiveCheck;
}
}
}
let x: never = true as never; // نمونه خطا در تخصیص.
undefined و null؛ غیبت مقدار
undefined یعنی مقدار تنظیم نشده. null یعنی عمداً خالی است. با strictNullChecks باید مدیریتشان کنی.
let y: undefined = undefined;
let z: null = null;
function greet(name?: string): string {
return `Hello, ${name || 'stranger'}`;
}
interface User {
name: string;
age?: number;
}
const value = (input ?? 'default');
const street = (user?.address?.street);
نکته: strictNullChecks را در tsconfig.json فعال کن تا خطاها زودتر مشخص شوند.
گام های عملی سریع
- برای داده های ناشناخته،
unknownبگذار. - قبل استفاده از
unknown، بررسی نوع انجام بده. - هرجا هرگز برنمی گردی، خروجی را
neverکن.
بیشتر بخوان: انواع ساده، آرایه ها، و انواع ویژه تایپ اسکریپت.
جمع بندی سریع
- any سریع است اما ناایمن است.
- unknown ایمن است اما بررسی می خواهد.
- never یعنی اتفاقی هرگز رخ نمی دهد.
- با strictNullChecks، null و undefined مدیریت می شوند.