การนิยามตัวแปรท้องถิ่นใหม่ใน TypeScript
มีเหตุผลเฉพาะอะไรหรือไม่ที่คอมไพเลอร์ 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;
}
ฉันเคยเจอสถานการณ์ทั้งสองอย่างอย่างน้อยสองครั้งเมื่อแปลงจาก Javascript เป็น TypeScript คงช่วยประหยัดเวลาการดีบักได้หลายชั่วโมงถ้าตัวคอมไพเลอร์เตือนฉัน
TypeScript 0.9.5
แก้ไข: นี่คือตัวอย่างของ TypeScript ที่ไม่ถูกต้องบางส่วนที่คอมไพเลอร์ TypeScript คอมไพล์เป็น JavaScript ที่ถูกต้อง:
class MyClass {
myFunction(myParam: number) {
myParam = 'abc';
}
}
ถ้าฉันบันทึกสิ่งนี้ใน Visual Studio TypeScript จะมองว่าเป็นข้อผิดพลาด แต่ยังคงคอมไพล์ไปเป็น
var MyClass = (function () {
function MyClass() {
}
MyClass.prototype.myFunction = function (myParam) {
myParam = 'abc';
};
return MyClass;
})();
ฉันเจอสถานการณ์แบบนี้ทุกวัน
แก้ไข 2: คำขอถูกยื่นแล้ว: https://typescript.codeplex.com/workitem/2128
คำตอบ #1
แม้ว่าจะสับสน แต่ทั้งสองกรณีนี้ไม่ถือเป็นข้อผิดพลาดตามข้อกำหนดของ EcmaScript TypeScript ไม่ใช่เครื่องมือ linting การประกาศตัวแปรซ้ำที่ประกาศแล้วถือว่าใช้ได้ใน EcmaScript (มันไม่มีผลอะไร) และการประกาศตัวแปรจะถูกยกขึ้นไปด้านบน ดังนั้นจึงไม่มีทางที่คุณจะเข้าถึงตัวแปรก่อนที่มันจะถูกประกาศได้
ตัวแรกเหมือนกับ:
function myFunction(len: number) {
len = 5;
}
ตัวที่สองเหมือนกับ:
function myFunction() {
var b: number, a: number;
b = a;
a = 5;
}
