2016-01-20 50 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

相关问题