2013-05-27 3 views
5

Есть ли способ обработать интерфейс или переменную в файле декларации типов, например class, чтобы иметь возможность расширить класс из него?Расширение класса из интерфейса декларации в Typcript

Как это:

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

} 

Сейчас я должен переопределить интерфейс EventEmitter, как это и использовать свою собственную декларацию 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; 
}; 

И продлить его позже в моей машинопись Файл

import tedious = module('tedious'); 

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

ответ

1

Он должен работать нормально, например:

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

Все, что вы положили в вашем файле вы можете поместить в .d. ts файл.

Try it

+1

Но тогда я пропустил бы все реализации EventEmitter, а TypScript будет игнорировать ошибку Property. Вот почему я переопределил класс NodeJS EventEmmiter в первую очередь. – Manuel

2

Я не знаю о еще в 2013 году, но сейчас это достаточно легко:

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

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

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

Я искал ответ на это, и, наконец, понял это.

Смежные вопросы