فهرست سرفصل‌های 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 — استنتاج نوع (Type Inference)

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

استنتاج نوع (Type Inference)

«استنتاج نوع (Type Inference)» یعنی تایپ اسکریپت خودش نوع را حدس بزند. مثل وقتی دبیر از پاسخ تو، نمره مناسب را حدس می زند. بنابراین کد کوتاه تر می شود و همچنان امن می ماند.

مقدمه سریع استنتاج نوع

استنتاج نوع برای متغیرها، خروجی توابع، و عبارت ها انجام می شود. سپس ابزارها بهتر کار می کنند و خطاها زودتر دیده می شوند.

let name = 'Alice';
let age = 30;
let isActive = true;
let numbers = [1, 2, 3];
let mixed = [1, 'two', true];

name.toUpperCase();
age.toFixed(2);

مشاهده در ادیتور

استنتاج نوعِ خروجی تابع

تایپِ بازگشتی تابع از روی returnها حدس زده می شود. بنابراین نوشتن تایپ اختیاری است؛ اما گاهی بهتر است.

function greet(name: string) {
  return `Hello, ${name}!`;
}

function add(a: number, b: number) {
  return a + b;
}

function getValue(key: string) {
  if (key === 'name') {
    return 'Alice';
  }
  else {
    return 42;
  }
}

let greeting = greet('Bob');
let sum = add(5, 3);
let value = getValue('age');

مشاهده در ادیتور

تایپ زمینه ای (Contextual Typing)

گاهی محیط، نوع را تعیین می کند. مثل وقتی اسم بازی را می بینی و می فهمی ژانرش چیست.

const names = ['Alice', 'Bob', 'Charlie'];

names.forEach((name) => {
  console.log(name.toUpperCase());
});

const nameLengths = names.map((name) => {
  return name.length;
});

document.addEventListener('click', (event) => {
  console.log(event.clientX, event.clientY);
});

مشاهده در ادیتور

استنتاج نوع در آبجکت ها

برای آبجکت های درجا، تایپ همه ویژگی ها حدس زده می شود. سپس دسترسی ها امن تر می شوند.

const user = {
  id: 1,
  name: 'Alice',
  email: 'alice@example.com',
  active: true,
  details: {
    age: 30,
    address: {
      city: 'New York',
      country: 'USA'
    }
  }
};

console.log(user.name.toUpperCase());
console.log(user.details.age.toFixed(0));
console.log(user.details.address.city.toLowerCase());

مشاهده در ادیتور

الگوهای پیشرفته

تأیید ثابت ها (Const Assertions)

با as const نوع به مقدار دقیق محدود می شود. مثل قفل کردن کارت.

let nameVar = 'Alice';
const nameConst = 'Alice' as const;

const userConst = {
  id: 1,
  name: 'Alice',
  roles: ['admin', 'user'] as const
} as const;

مشاهده در ادیتور

نگهبان نوع و جریان کنترل

با «نگهبان نوع»، تایپ در شاخه ها دقیق تر می شود. سپس خطاها کم می شوند.

function processValue(value: string | number) {
  if (typeof value === 'string') {
    console.log(value.toUpperCase());
  }
  else {
    console.log(value.toFixed(2));
  }
}

interface Circle {
  kind: 'circle';
  radius: number;
}

interface Square {
  kind: 'square';
  size: number;
}

type Shape = Circle | Square;

function area(shape: Shape) {
  switch (shape.kind) {
    case 'circle':
      return Math.PI * shape.radius ** 2;
    case 'square':
      return shape.size ** 2;
  }
}

مشاهده در ادیتور

بهترین روش ها

جاهایی بگذارید استنتاج انجام شود؛ اما جاهایی هم صریح بنویسید.

let message = 'Hello';

function formatName(firstName: string, lastName: string) {
  return `${firstName} ${lastName}`;
}

function processData(input: string[]): { count: number; items: string[] } {
  return {
    count: input.length,
    items: input.map((item) => item.trim())
  };
}

const emptyArray: string[] = [];
const configOptions: Record<string, unknown> = {};

const canvas = document.getElementById('main-canvas') as HTMLCanvasElement;

مشاهده در ادیتور

کی نوع صریح بنویسیم؟

برای API عمومی، ساختارهای پیچیده، مستندسازی، و آرایه های خالی بهتر است نوع را صریح بنویسیم. بنابراین خوانایی بالاتر می رود.

گام های عملی

  1. اول ساده بنویس و به استنتاج اعتماد کن.
  2. برای ورودی توابع، نوع صریح بده.
  3. برای خروجی پیچیده، نوع بازگشتی را بنویس.
  4. برای آرایه خالی، تایپ را مشخص کن.
  5. با نگهبان نوع، شاخه ها را دقیق تر کن.

جمع بندی سریع

  • استنتاج نوع کد را کوتاه و امن می کند.
  • زمینه کد روی نوع اثر دارد.
  • as const نوع را محدود می کند.
  • جاهایی نوع صریح بهتر است.

مطالب مرتبط: انواع نگاشتی، انواع شرطی، و نگهبان های نوع. همچنین نمونه کدها در W3Schools: Type Inference بررسی شده اند.