TypeScript: เข้าถึงคลาสในโมดูล/เนมสเปซระดับโลก
ฉันมีสถานการณ์ดังต่อไปนี้:
module MyModule {
export class Image {
...
}
var image = Image(); // returns an instance of MyModule.Image
}
อย่างไรก็ตาม ฉันต้องการสร้างอินสแตนซ์ของ HTMLImageElement ไม่ใช่ MyModule.Image ฉันจะระบุได้อย่างไรว่าต้องการสร้างอินสแตนซ์ของคลาสที่อยู่ในโมดูล/เนมสเปซระดับโลก
ขอบคุณ!
คำตอบ #1
มีหลายวิธี แต่ฉันจะแนะนำให้ใช้ document.createElement ไม่ว่าจะด้วยวิธีใด ตัวอย่างเช่น:
var image = <HTMLImageElement>document.createElement('img');
คุณสามารถสร้างฟังก์ชันหรือคลาสที่สะดวกซึ่งห่อหุ้มสิ่งนี้ให้คุณได้
หนึ่งในวิธีอื่น ๆ ตัวอย่างเช่น คือการสร้างการอ้างอิงไปยังคลาส Image ต้นฉบับก่อนการนิยามคลาสของคุณ:
var ImageElement = Image;
...
export class Image {
...
}
var image = new ImageElement()
อย่างไรก็ตาม มันจะไม่ถูกจำแนกเป็นอินสแตนซ์ของ HTMLImageElement นั่นคือจะไม่มีการเติมโค้ดที่เหมาะสม
แก้ไข: นี่คือความพยายาม ที่ใช้งานไม่ได้ ของฉันในการขยายอินเทอร์เฟซ Window ตามที่กล่าวถึงในความคิดเห็น:
interface Window {
Image: new(width?: number, height?: number) => HTMLImageElement;
}
มันคอมไพล์ถูกต้อง (คือไม่มีข้อผิดพลาด) แต่ใน Visual Studio มันถูกระบุว่าเป็นข้อผิดพลาด โดยบอกว่า Duplicate Identifier 'Image' และความพยายามที่จะสร้างอินสแตนซ์ผ่าน new window.Image() ถูกระบุว่า new expressions only valid on constructors น่าสนใจที่มันทำงานได้ปกติบนอินเทอร์เฟซอื่น ๆ และตามที่ได้กล่าวไปแล้ว มันคอมไพล์ได้ถูกต้อง
