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

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 น่าสนใจที่มันทำงานได้ปกติบนอินเทอร์เฟซอื่น ๆ และตามที่ได้กล่าวไปแล้ว มันคอมไพล์ได้ถูกต้อง

บทความที่เกี่ยวข้อง