2016-01-20 45 views
0

例如,我有這樣的事情:人們通常如何模擬在聲明中實現接口的類?

declare module 'rxjs' { 
    declare interface CoreOperators<T> { 
    static merge<R>(...sources: Observable<R>[]): Observable<R>; 

    map<R>(f: (item: T) => R): Observable<R>; 
    scan<R>(f: (prev: R, next: T) => R): Observable<R>; 
    } 

    declare class Observable<T> implements CoreOperators<T> { 
    observableSpecificMethod: (f: Function): Observable<T> 
    } 
} 

這樣Observable<T>應該得到在界面中的所有簽名,並有自己的。

回答

0

在流,你可以表示接口類型和繼承的路口類型:

type CoreOperators<T> = { 
    map: <R>(f: (item: T) => R) => Observable<R>; 
    scan: <R>(f: (prev: R, next: T) => R) => Observable<R>; 
}; 

type Observable<T> = CoreOperators<T> & { 
    observableSpecificMethod: (f: Function) => Observable<T> 
}; 
0

我只是一點點前發現,你可以做class Aclass B mixins A和可能是我到最近的事與...

所以也許像

declare module 'rxjs' { 
    declare class CoreOperators<T> { 
    static from(array: T[] | rxjs$ArrayLike<T>): Observable<T>; 
    static merge<R>(...sources: Observable<R>[]): Observable<R>; 

    do(f: (item: T) => any): Observable<T>; 
    map<R>(f: (item: T) => R): Observable<R>; 
    scan<R>(f: (prev: R, next: T) => R): Observable<R>; 
    skip(count: number): Observable<T>; 
    startWith(init: any): Observable<T>; 
    take(count: number): Observable<T>; 
    } 

    declare class Observable<T> mixins CoreOperators<T> { 
    subscribe(
     next: (item: T) => any, 
     error?: (error: any) => any, 
     complete?: (item: T) => any 
    ): Subscription; 
    } 
} 

儘管如此挖掘工作,但是這可能是唯一阿瓦伊現在拉布爾。

+0

我沒有在任何地方看到關鍵字'mixins'。你確定嗎? – Peeja

相關問題