Typescript ตัวระบุซ้ำ 'Node'
เมื่อคอมไพล์ TypeScript ต่อไปนี้:
class Node {
}
มันทำงานได้ในสนามเด็กเล่นแต่ไม่สามารถใช้กับ VS2013 หรือ grunt-typescript ซึ่งทำให้เกิดข้อผิดพลาด
TS2000: Duplicate identifier 'Node'
ฉันเดาว่ามันอาจเป็นเพราะมันเป็นคำสงวน แต่ฉันได้ค้นหาเอกสารสเปกของ TypeScript สำหรับคำสงวนแล้วและไม่พบคำใด ๆ มีรายการคำสงวนที่สามารถใช้ได้หรือไม่ และทำไมชื่อคลาสที่ใช้บ่อยเช่นนี้ถึงถูกสงวนไว้?
คำตอบ #1
Node เป็นวัตถุอยู่แล้วใน JavaScript มันไม่ใช่คำสำรอง แต่เป็นสิ่งที่มีอยู่ในตัวซึ่งคุณไม่ต้องการเขียนทับโดยบังเอิญขณะรันไทม์ (เพราะคุณอาจทำให้ไลบรารีอื่น ๆ ใช้งานไม่ได้)
> Node.prototype
Node {insertBefore: function, replaceChild: function, removeChild: function, appendChild: function, hasChildNodes: function…}
คำตอบ #2
โอเค ดูเหมือนว่าจะมีไฟล์ไลบรารี:
lib.d.ts
นั่นมีโค้ด TypeScript ขนาด 8 KLOC โดยไม่มีโมดูลหรือเนมสเปซใด ๆ ซึ่งทำให้ฉันเจอปัญหาการชนกันของชื่อทุกประเภท น่าหงุดหงิดเพราะคอมไพเลอร์ไม่ให้ตำแหน่งใด ๆ และฉันต้องใช้เวลาหลายชั่วโมงในการแยกระบบการสร้างของฉันเพื่อค้นหาข้อผิดพลาดบางอย่าง
