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

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

تعریف صریح و استنتاج نوع (Explicit & Inference)

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

حاشیه نویسی نوع و استنتاج

دو راه داری: 1) تعریف صریح برای شفافیت. 2) استنتاج برای کد تمیز. برای ورودی ها و خروجی توابع، صریح بنویس. برای متغیرهای ساده، استنتاج کافی است.

تعریف صریح نوع (Explicit)

در تعریف صریح، دقیقاً نوع را اعلام می کنی. این کار کد را قابل فهم و نگه داری پذیر می کند.

let greeting: string = "Hello, TypeScript!";
let userCount: number = 42;
let isLoading: boolean = true;
let scores: number[] = [100, 95, 98];

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

برای توابع، نوع ورودی و خروجی را صریح کن.

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

greet("Alice");
// greet(42); // Error: 'number' به 'string' نمی خورد.

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

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

وقتی مقدار اولیه معلوم است، TS خودش نوع را حدس می زند. این کار کدنویسی را سریع تر می کند.

let username = "alice";
let score = 100;
let flags = [true, false, true];
function add(a: number, b: number) {
  return a + b;
}

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

نکته: استنتاج وقتی عالی است که همان جا مقداردهی کنی. متغیرِ بی مقدار معمولاً any می شود.

استنتاج آبجکت

TS شکل آبجکت را هم می فهمد. پس اگر ویژگی نباشد، خطا می دهد.

const user = {
  name: "Alice",
  age: 30,
  isAdmin: true
};

console.log(user.name);
// console.log(user.email); // Error: 'email' وجود ندارد.

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

نمونه های خطای ناسازگاری نوع

TS خطاهای نوعی را زود می گیرد. بنابراین باگ ها کمتر می شوند.

let nickname: string = "alice";
// nickname = 42; // Error: 'number' به 'string' نمی خورد.

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

let level = 100;
// level = "high"; // Error: 'string' به 'number' نمی خورد.

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

جاوااسکریپت در برابر تایپ اسکریپت

در JS، این کد اجرا می شود و ممکن است باگ بسازد.

function addJS(a, b) {
  return a + b;
}

console.log(addJS("5", 3));

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

در TS، همان مثال را ایمن کن.

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

// console.log(addTS("5", 3)); // Error: 'string' مجاز نیست.

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

وقتی استنتاج کافی نیست

گاهی TS نوع درست را حدس نمی زند و any می شود. any یعنی کنترل نوع خاموش است.

const data = JSON.parse('{ "name": "Alice", "age": 30 }');
let something;
something = "hello";
something = 42;

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

هشدار: تا می توانی از any دوری کن. نوع نویسی کن، Interface بساز، Type Guard بنویس و noImplicitAny را فعال کن.

برای ادامه مسیر، از انواع ساده مرور کن. سپس به نوع های ویژه برو.

جمع بندی سریع

  • ورودی و خروجی توابع را صریح بنویس.
  • برای متغیرهای ساده، استنتاج کافی است.
  • ناسازگاری نوع، زود کشف می شود.
  • از any فقط در ضرورت استفاده کن.
  • Object Inference شکل داده را حفظ می کند.