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

dojo - Typescript ใช้ typeof กับ interface ได้ไหม?


ฉันเพิ่งค้นพบคำสำคัญ typeof ใน TypeScript และมันเกือบช่วยชีวิตได้ ฉันต้องการอธิบาย ContentPane ของ dojo เป็นอินเทอร์เฟซ:

declare module dijit {

    module layout {

        interface ContentPane extends dijit._Widget, dijit._Container {
        }
    }
}

declare module "dijit/layout/ContentPane"
{
    var ContentPane: typeof dijit.layout.ContentPane;
    export = ContentPane;
}

แต่โชคร้ายที่ฉันไม่สามารถใช้ typeof กับอินเทอร์เฟซได้ ฉันต้องอธิบาย ContentPane เป็นคลาสแทน แต่เนื่องจาก TypeScript ไม่รองรับการสืบทอดหลายชั้น (ผ่าน extends) ฉันต้องทำแบบนี้หรือ?

declare module dijit {

    module layout
    {

        class ContentPane extends dijit._Widget
        implements dijit._Container
        {
            // how to avoid duplicating the _Container here?
            addChild(widget: _WidgetBase, insertIndex?: number): void;
            getIndexOfChild(child: _WidgetBase): number;
            hasChildren(): boolean;
            removeChild(widget: _WidgetBase): void;
            removeChild(widget: number): void;
        }
    }
}

declare module "dijit/layout/ContentPane"
{
    var ContentPane: typeof dijit.layout.ContentPane;
    export = ContentPane;
}

มีทางเลือกอื่นที่ไม่จำเป็นต้องให้ฉันทำสำเนาลายเซ็นของ dijit._Container ไหม? มีคำอธิบายว่าเหตุใด typeof SomeInterface จึงไม่ทำงานหรือไม่?

คำตอบ #1

ยังไม่สามารถทำสิ่งนี้ได้ (0.9.5) ดูรายการงาน.

คำตอบ #2

อินเทอร์เฟซใน TypeScript สามารถมีลายเซ็นการเรียกใช้งาน เช่น ตัวอย่างต่อไปนี้จะคอมไพล์ได้:

interface Foo{
    new (arg:string):number;
}

var SomeClass:Foo;

var someInstance = new SomeClass("somestring");

ดังนั้นคุณไม่จำเป็นต้องใช้ typeof กับอินเทอร์เฟซ และควรทำเพียง:

declare module dijit {

    module layout {

        interface ContentPane extends dijit._Widget, dijit._Container {
        }
    }
}

declare module "dijit/layout/ContentPane"
{
    var ContentPane: dijit.layout.ContentPane;
    export = ContentPane;
}