TypeScript模块扩充

时间:2018-05-14 00:53:11

标签: angular typescript rxjs rxjs6

我有可观察的扩展名。它工作得非常好,但现在我已经使用打字稿2.7.2更新为角度6。

import { Observable } from 'rxjs/Observable';
import { BaseComponent } from './base-component';
import { Subscription } from 'rxjs/Subscription';
import { Subscribable } from 'rxjs';

declare module 'rxjs/Observable' {
    export interface Observable<T> {
        safeSubscribe<T>(this: Observable<T>, component: BaseComponent,
            next?: (value: T) => void, error?: (error: T) => void, complete?: () => void): Subscription;
    }
}


export function safeSubscribe<T>(this: Observable<T>, component: BaseComponent,
    next?: (value: T) => void, error?: (error: T) => void, complete?: () => void): Subscription {
    let sub = this.subscribe(next, error, complete);
    component.markForSafeDelete(sub);
    return sub;
}

Observable.prototype.safeSubscribe = safeSubscribe;

此代码无效

  1. &#39;可观察&#39;仅指一种类型,但在此处用作值。
  2. 属性&#39;订阅&#39;类型&#39; Observable&#39;。
  3. 上不存在

    https://www.typescriptlang.org/docs/handbook/declaration-merging.html

1 个答案:

答案 0 :(得分:7)

合并声明时,指定的模块路径必须与实际模块的路径完全匹配。

使用RxJS版本6,您需要更改模块声明,因为内部结构已更改。从记忆中,它应该是:

declare module 'rxjs/internal/Observable' {
    export interface Observable<T> {
        safeSubscribe<T>(this: Observable<T>, component: BaseComponent,
            next?: (value: T) => void, error?: (error: T) => void, complete?: () => void): Subscription;
    }
}

有关示例,请参阅rxjs-compat中的one of the patching imports