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;
}
