Расширение модуля TypeScript - PullRequest
0 голосов
/ 14 мая 2018

У меня есть расширение для наблюдаемого. Он работал отлично, но теперь я обновился до angular 6 с машинописью 2.7.2.

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. «Наблюдаемый» относится только к типу, но здесь используется в качестве значения.
  2. Свойство «подписка» не существует для типа «Наблюдаемый».

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

1 Ответ

0 голосов
/ 14 мая 2018

При объединении объявлений указанный путь к модулю должен точно соответствовать пути к фактическому модулю.

В версии 6 RxJS вам нужно будет изменить объявление вашего модуля, так как изменилась внутренняя структура. По памяти должно быть:

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.

...