2013-05-27 37 views
5

Czy istnieje sposób na potraktowanie interfejsu lub zmiennej wewnątrz pliku deklaracji maszynopisu, takiego jak klasa, aby móc przedłużyć z niej klasę?Rozszerz klasę z interfejsu deklaracji w pliku

Jak to:

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

} 

Teraz muszę na nowo zdefiniować interfejs EventEmitter takiego i użyć własnego oświadczenia 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; 
}; 

i przedłużyć go później w moim maszynopis Plik

import tedious = module('tedious'); 

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

Odpowiedz

1

powinno działać np

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

cokolwiek umieścić w pliku można umieścić w .d. plik ts.

Try it

+1

Ale wtedy brakowałoby mi wszystkich implementacji EventEmitter, a Maszynka do pisania powodowałaby brakujący błąd właściwości. Właśnie dlatego na nowo zdefiniowałem klasę NodeJS EventEmmiter. – Manuel

2

Nie wiem o powrót w 2013 roku, ale teraz jest to dość łatwe:

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

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

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

szukałem odpowiedzi na to, i wreszcie zdobione.