تعریف مجدد متغیرهای محلی در تایپاسکریپت
آیا دلیل خاصی وجود دارد که کامپایلر TypeScript مورد زیر را به عنوان خطا علامت نمیزند؟
myFunction(len: number) {
var len: number = 5; // re-definition of local variable (name clash)
}
یکی دیگر:
myFunction() {
var b: number = a; // variable a is accessed before it is declared/initialized
var a: number = 5;
}
من حداقل دو بار با هر دو موقعیت هنگام تبدیل جاوااسکریپت به تایپاسکریپت مواجه شدهام. اگر کامپایلر به من هشدار داده بود، ساعتها در اشکالزدایی صرفهجویی میشد.
تایپاسکریپت ۰.۹.۵
ویرایش: در اینجا مثالی از برخی TypeScript نامعتبر آورده شده است که کامپایلر TypeScript آن را به JavaScript معتبر کامپایل میکند:
class MyClass {
myFunction(myParam: number) {
myParam = 'abc';
}
}
اگر این را در ویژوال استودیو ذخیره کنم، تایپاسکریپت آن را به عنوان یک خطا علامتگذاری میکند، اما با این حال آن را به
var MyClass = (function () {
function MyClass() {
}
MyClass.prototype.myFunction = function (myParam) {
myParam = 'abc';
};
return MyClass;
})();
من هر روز با چنین موقعیتهایی مواجه میشوم.
ویرایش ۲: درخواست ثبت شد: https://typescript.codeplex.com/workitem/2128
پاسخ شماره ۱
اگرچه گیجکننده است، هیچیک از این موارد خطا محسوب نمیشوند طبق مشخصات EcmaScript. TypeScript یک ابزار linting نیست. دوباره اعلام کردن یک متغیر که قبلاً اعلام شده است در EcmaScript معتبر است (هیچ عملی انجام نمیدهد)، و اعلانهای متغیر بالا برده میشوند بنابراین هیچ راهی وجود ندارد که شما بتوانید به یک متغیر قبل از اعلام آن دسترسی داشته باشید.
اولی همانند این است:
function myFunction(len: number) {
len = 5;
}
دومی همانند است با:
function myFunction() {
var b: number, a: number;
b = a;
a = 5;
}
