برنامه نویسی

TS2328: انواع پارامترها '{0}' و '{1}' ناسازگار هستند

TypeScript یک زبان برنامه نویسی با منبع باز و به شدت تایپ شده است که با افزودن انواع استاتیک بر روی JavaScript ساخته می شود. این ابزار ابزارآلات قوی را برای دستیابی به خطاها در زمان کامپایل ، بهبود قابلیت اطمینان و خوانایی کد های کد آنها فراهم می کند. یکی از مزایای اصلی TypeScript سیستم نوع آن (قوانینی است که ورودی ها/خروجی های متغیر یا عملکرد را تعریف می کند) ، که به توسعه دهندگان کمک می کند تا شکل و ماهیت ساختار داده ها را تعریف کنند و از اشکالات زمان کمتری اطمینان حاصل کنند.

انواع یکی از بلوک های ساختمانی در TypeScript است. آنها به توسعه دهندگان اجازه می دهند نوع مقادیر (به عنوان مثال ، اعداد ، رشته ها ، بول ها ، اشیاء) را که متغیرها ، پارامترها یا بازده عملکرد دارند ، مشخص کنند. با این کار ، TypeScript تضمین می کند که کد در طول توسعه به مقادیر مورد انتظار پایبند باشد. TypeScript به دلیل سیستم نوع خود ، بسیاری از اشکالات را به خود جلب می کند ، اما از آنجا TS2328: انواع پارامترها '{0}' و '{1}' ناسازگار هستندبشر اگر می خواهید عمیق تر به مفاهیم TypeScript شیرجه بزنید یا ابزارهای یادگیری کد AI را کشف کنید ، حتماً به GPTEACH.US مراجعه کرده و سفر برنامه نویسی خود را ارتقا دهید!

در این مقاله ، خطای TS2328 را که باعث ایجاد آن می شود ، و نحوه رفع آن به همراه سایر مفاهیم مربوط به Typescript را بررسی خواهیم کرد. قبل از آن ، بیایید به طور خلاصه یک موضوع مرتبط را درک کنیم: رابطبشر

رابط ها چیست؟

در TypeScript ، رابط ها راهی برای تعریف شکل یک شی هستند. آنها به عنوان قرارداد عمل می کنند ، و مشخص می کنند که یک شیء یا روش هایی باید (و انواع آنها) چه خصوصیات یا روش هایی داشته باشد. رابط ها برای اجرای ساختار در اشیاء مفید هستند و کد شما را قابل پیش بینی می کنند.

در اینجا یک مثال آورده شده است:

interface User {
  name: string; // A User must have a 'name' property with a string type
  age: number;  // A User must have an 'age' property with a number type
}

function greet(user: User): void {
  console.log(`Hello, ${user.name}!`);
}

// Valid
const user1 = { name: "Alice", age: 30 };
greet(user1);

// Invalid - This will cause an error because 'email' is not part of the User interface
const user2 = { name: "Bob", email: "bob@example.com" };
greet(user2);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

رابط ها با اطمینان از مطابقت اشیاء با یک ساختار تعریف شده ، ایمنی و خوانایی کد را بهبود می بخشند. اگر چیزی مطابقت نداشته باشد ، TypeScript خطایی را مانند “خاصیت از نوع” از دست می دهد. خطای TS2328 همچنین می تواند ایجاد شود که رابط ها با ساختار نوع مورد انتظار بین پارامترها مطابقت نداشته باشند.


TS2328: انواع پارامترها '{0}' و '{1}' ناسازگار هستند

حال ، بیایید به قلب این مقاله بپردازیم. خطای TS2328 هنگامی اتفاق می افتد که TypeScript عدم تطابق بین انواع پارامترهای مورد انتظار توسط یک تابع/روش و انواع پارامترهای ارائه شده در طول فراخوانی آن را تشخیص می دهد. این خطا تضمین می کند که از عملکردهای شما به درستی استفاده شده و داده های ارائه شده با ساختار مورد انتظار مطابقت دارند.

به معنای ساده ، یعنی ، “سلام! شما سعی می کنید نوع اشتباه داده ها را به این عملکرد یا روش منتقل کنید ، و من قصد دارم شما را متوقف کنم قبل از اینکه بعداً باعث ایجاد مشکل شود.”

علل مشترک TS2328

در اینجا رایج ترین سناریوهایی که منجر به TS2328: انواع پارامترها '{0}' و '{1}' ناسازگار هستند خطا:

  1. ساختارهای شیء ناسازگار (به عنوان مثال ، با استفاده از یک نوع رابط نادرست).
  2. آرگومان های عملکرد نادرست یا داده های اشتباه در جایی که به انواع خاص مورد نیاز است منتقل می شود.
  3. تعاریف نوع متناقض در قسمت های مختلف کد.

بیایید با مثال و راه حل به این دلایل بپردازیم.


مثال 1: رابط ناسازگار در پارامترها

interface Employee {
  id: number;
  name: string;
}

function printEmployeeDetails(emp: Employee): void {
  console.log(`ID: ${emp.id}, Name: ${emp.name}`);
}

// Calling the function with a mismatched parameter type
const manager = { managerId: 101, name: "John Smith" };
printEmployeeDetails(manager); // Error TS2328
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

توضیح خطا:

تابع printEmployeeDetails انتظار یک شیء است که به آن پایبند باشد Employee رابط (باید داشته باشد id وت name). با این حال ، manager شیء این ساختار را برآورده نمی کند زیرا لازم نیست id خاصیت بنابراین ، TS2328 مطرح شده است.

راه حل:

با اطمینان از مطابقت با شیء تصویب شده ، داده های ناسازگار را برطرف کنید Employee رابط

const manager = { id: 101, name: "John Smith" }; // Fix: Add 'id'
printEmployeeDetails(manager); // Works fine now
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


مثال 2: نوع داده نادرست تصویب شد

function calculateSquare(num: number): number {
  return num * num;
}

// Error: Passing a string instead of a number
const result = calculateSquare("4"); // TS2328
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

توضیح خطا:

در calculateSquare تابع انتظار یک پارامتر از نوع را دارد numberبشر با این حال ، در مثال بالا ، آرگومان تصویب شده یک رشته است ("4"). از آنجا که TypeScript ایمنی از نوع سخت را تقویت می کند ، خطای TS2328 را پرتاب می کند.

راه حل:

اطمینان حاصل کنید که پارامتر با نوع داده مورد انتظار مطابقت دارد.

const result = calculateSquare(4); // Correctly passing a number
console.log(result); // Outputs: 16
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


مهم برای دانستن!

  1. همیشه انواع پارامتر را تعریف کنید: هنگامی که TypeScript نمی تواند نوع پارامترها را استنباط کند ، به صراحت نوع را برای گرفتن مشکلات زود هنگام تعریف کنید. به عنوان مثال:
   function sum(a: number, b: number): number {
     return a + b;
   }
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  1. از رابط ها برای اشیاء استفاده کنید: رابط های اشیاء پیچیده را برای ارائه وضوح و اطمینان از سازگاری در کد خود تعریف کنید.

  2. امضاهای عملکرد را بررسی کنید: انواع ناسازگار اغلب ناشی از سوء تفاهم در امضای عملکرد/روش است. اگر TS2328 ظاهر می شود ، انواع مورد انتظار را بررسی کنید.


مثال 3: عدم تطابق پارامتر عمومی

بعضی اوقات ، TS2328 می تواند هنگام کار با Generics (انواع انعطاف پذیر که می توانند سازگار شوند) ظاهر شوند.

function doSomething<T>(input: T): T {
  return input;
}

interface User {
  username: string;
}

const user: User = { username: "Alice" };

// Mismatched types
const result: string = doSomething(user); // TS2328
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

توضیح خطا:

عملکرد عمومی doSomething هر نوع منتقل شده را باز می گرداند (T). اما در مثال ، user (از نوع User) منتقل می شود ، اما نتیجه به متغیر نوع اختصاص می یابد stringبشر این عدم تطابق نوع TS2328 را ایجاد می کند.

راه حل:

انواع را به درستی مطابقت دهید ، یا اجازه دهید TypeScript انواع را به درستی استنباط کند.

const result: User = doSomething(user); // Correct
console.log(result.username); // Outputs: Alice
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


سؤالات متداول: حل خطاهای TS2328

س: آیا برای هر پارامتر نیاز به تعریف انواع دارم؟

پاسخ: نه همیشه. TypeScript در بسیاری از موارد می تواند استنباط کند. با این حال ، هنگام برخورد با اشیاء پیچیده یا انواع عمومی ، توصیه می شود انواع صریح را به صراحت تعریف کنید.

س: آیا می توان از رابط ها و انواع به صورت متقابل استفاده کرد؟

پاسخ: اغلب ، بله. هر دو برای تعریف شکل اشیاء استفاده می شوند. با این حال ، رابط ها گسترده تر هستند (می توانند ادغام شوند).

س: چرا TS2328 از “{0}” و “{1}” یاد می کند؟

پاسخ: متقاضیان {0} وت {1} در پیام خطا جزئیات نوع را نشان می دهد. TypeScript این موارد را با انواع واقعی ناسازگار در محیط شما جایگزین می کند.


درج کردن

در TS2328: انواع پارامترها '{0}' و '{1}' ناسازگار هستند خطا با اطمینان از اینکه ورودی به توابع یا روشها با امضاهای نوع آنها مطابقت دارد ، از کد Typescript شما محافظت می کند. دلایل متداول شامل رابط های ناسازگار ، عبور از انواع داده های نادرست و سوء تفاهم تعاریف عمومی است. با کار دقیق با سیستم نوع Typecript و ابزارهایی مانند رابط ، می توانید چنین مواردی را قبل از زمان اجرا کنید و کد خود را قوی تر کنید.

اگر مایل به تسلط به TypeScript هستید ، منابع اضافی را کشف کنید ، یا ابزارهای هوش مصنوعی مانند gpteach.us را اهرم کنید ، شما یک قدم نزدیک به ستاره TypeScript هستید! با اطمینان به یادگیری و برنامه نویسی ادامه دهید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا