فهرست سرفصل‌های TypeScript
خانه (Home) معرفی (Introduction) شروع سریع (Get Started) انواع ساده (Simple Types) تعریف صریح و استنتاج نوع (Explicit & Inference) انواع ویژه (Special Types) آرایه ها (Arrays) تاپل ها (Tuples) انواع شیء (Object Types) شمارشی ها (Enums) نام مستعار و اینترفیس ها (Aliases & Interfaces) انواع اتحادی (Union Types) توابع (Functions) تبدیل نوع (Casting) کلاس ها (Classes) جنریک های پایه (Basic Generics) انواع کاربردی (Utility Types) کلیدواژه keyof (Keyof) Null (Null) Definitely Typed (Definitely Typed) به روزرسانی های نسخه 5 (5 Updates) پیکربندی (Configuration) با Node.js (with Node.js) با React (with React) ابزارها (Tooling) انواع پیشرفته (Advanced Types) نگهبان های نوع (Type Guards) انواع شرطی (Conditional Types) انواع نگاشتی (Mapped Types) استنتاج نوع (Type Inference) انواع لیترال (Literal Types) فضای نام (Namespaces) امضاهای ایندکس (Index Signatures) ادغام اعلان ها (Declaration Merging) برنامه نویسی ناهمگام (Async Programming) دکوراتورها (Decorators) در پروژه های JS (in JS Projects) مهاجرت (Migration) مدیریت خطا (Error Handling) بهترین شیوه ها (Best Practices) ادیتور (Editor) تمرین ها (Exercises) آزمون (Quiz) سرفصل دوره (Syllabus) برنامه مطالعه (Study Plan) گواهینامه (Certificate)
نتیجه‌ای برای جستجو یافت نشد.
TypeScript

TypeScript — انواع ویژه (Special Types)

آخرین بروزرسانی: 1404/08/14

انواع ویژه (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 فعال کن تا خطاها زودتر مشخص شوند.

گام های عملی سریع

  1. برای داده های ناشناخته، unknown بگذار.
  2. قبل استفاده از unknown، بررسی نوع انجام بده.
  3. هرجا هرگز برنمی گردی، خروجی را never کن.

بیشتر بخوان: انواع ساده، آرایه ها، و انواع ویژه تایپ اسکریپت.

جمع بندی سریع

  • any سریع است اما ناایمن است.
  • unknown ایمن است اما بررسی می خواهد.
  • never یعنی اتفاقی هرگز رخ نمی دهد.
  • با strictNullChecks، null و undefined مدیریت می شوند.