2013-05-27 7 views
5

C'è un modo per trattare un'interfaccia o una variabile all'interno di un file di dichiarazione del dattiloscritto come classe per poter estendere una classe da essa?Estendi una classe da un'interfaccia di dichiarazione in Typescript

Ti piace questa:

declare module "tedious" { 

    import events = module('events'); 

    export class Request extends event.EventEmitter { 
     constructor (sql: string, callback: Function); 
     addParameter(name: string, type: any, value: string):any; 
     addOutputParameter(name: string, type: any): any; 
     sql:string; 
     callback: Function; 
    }; 

} 

In questo momento devo ridefinire l'interfaccia EventEmitter come questo e usare la mia dichiarazione EventEmitter.

import events = module('events'); 

class EventEmitter implements events.NodeEventEmitter{ 
    addListener(event: string, listener: Function); 
    on(event: string, listener: Function): any; 
    once(event: string, listener: Function): void; 
    removeListener(event: string, listener: Function): void; 
    removeAllListener(event: string): void; 
    setMaxListeners(n: number): void; 
    listeners(event: string): { Function; }[]; 
    emit(event: string, arg1?: any, arg2?: any): void; 
} 

export class Request extends EventEmitter { 
    constructor (sql: string, callback: Function); 
    addParameter(name: string, type: any, value: string):any; 
    addOutputParameter(name: string, type: any): any; 
    sql:string; 
    callback: Function; 
}; 

ed estendere in un secondo momento dentro il mio dattiloscritto File

import tedious = module('tedious'); 

class Request extends tedious.Request { 
    private _myVar:string; 
    constructor(sql: string, callback: Function){ 
     super(sql, callback); 
    } 
} 

risposta

1

Dovrebbe funzionare bene per esempio:

// Code in a abc.d.ts 
declare module "tedious" { 
    export class Request { 
     constructor (sql: string, callback: Function); 
     addParameter(name: string, type: any, value: string):any; 
     addOutputParameter(name: string, type: any): any; 
     sql:string; 
     callback: Function; 
    }; 
} 

// Your code: 
///<reference path='abc.d.ts'/> 
import tedious = module('tedious'); 

class Request extends tedious.Request { 
    private _myVar:string; 
    constructor(sql: string, callback: Function){ 
     super(sql, callback); 
    } 
} 

Tutto ciò che si mette in file che si può mettere in una .d. file ts.

Try it

+1

Ma poi mi mancavano tutte le implementazioni di EventEmitter e Typescript avrebbe generato un errore di proprietà mancante. Ecco perché ho ridefinito la classe EventEmmiter di NodeJS in primo luogo. – Manuel

2

Non so su di nuovo nel 2013, ma ora è abbastanza facile:

/// <reference path="../typings/node/node.d.ts" /> 
import * as events from "events"; 

class foo extends events.EventEmitter { 
    constructor() { 
     super(); 
    } 

    someFunc() { 
     this.emit('doorbell'); 
    } 
} 

che stavo cercando la risposta a questo, e, infine, capito.