2013-05-27 39 views
5

Bir arabirimi sınıftan genişletmek için sınıf gibi bir dosya tanıtımı dosyasının içindeki bir arabirimi veya değişkeni işlemenin bir yolu var mı? Bunun gibiTypescript'teki bir bildirim arabiriminden sınıf genişletme

:

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

} 

Şu anda ben böyle EventEmitter arayüzünü yeniden tanımlamak ve kendi EventEmitter beyanı kullanmak zorunda.
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; 
}; 

Ve typescript Dosyası

import tedious = module('tedious'); 

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

cevap

1

O ince örneğin çalışması gerekir içeride daha sonra uzatmak: Eğer bir .d koyabilirsiniz Dosyanda koymak

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

şey. ts dosyası.

Try it

+1

Ama sonra tüm EventEmitter uygulamalarını özlüyorum ve Typescript'de Eksik Mülk hatası var. Bu yüzden ilk etapta NodeJS EventEmmiter sınıfını yeniden tanımladım. – Manuel

2

Ben yaklaşık geri 2013 yılında Bilmiyorum, ama şimdi kolay yeter: Ben buna yanıtı bulmaya

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

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

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

ve nihayet bunu anladım.