TypeScript 模块扩充
TypeScript module Augmentation
我有可观察的扩展。它工作得非常好,但现在我已经使用打字稿 2.7.2 更新到 angular 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;
此代码无效
- 'Observable'仅指类型,但在这里用作值。
- 属性 'subscribe' 在类型 'Observable' 上不存在。
https://www.typescriptlang.org/docs/handbook/declaration-merging.html
合并声明时,指定的模块路径必须与实际模块的路径完全匹配。
对于 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。
我有可观察的扩展。它工作得非常好,但现在我已经使用打字稿 2.7.2 更新到 angular 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;
此代码无效
- 'Observable'仅指类型,但在这里用作值。
- 属性 'subscribe' 在类型 'Observable' 上不存在。
https://www.typescriptlang.org/docs/handbook/declaration-merging.html
合并声明时,指定的模块路径必须与实际模块的路径完全匹配。
对于 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。