ค้นหาเว็บไซต์

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 โดยไม่มีโมดูลหรือเนมสเปซใด ๆ ซึ่งทำให้ฉันเจอปัญหาการชนกันของชื่อทุกประเภท น่าหงุดหงิดเพราะคอมไพเลอร์ไม่ให้ตำแหน่งใด ๆ และฉันต้องใช้เวลาหลายชั่วโมงในการแยกระบบการสร้างของฉันเพื่อค้นหาข้อผิดพลาดบางอย่าง