【发布时间】:2016-10-13 12:06:25
【问题描述】:
我想用 static 函数扩展 rxjs5 Observable 类。我可以用纯 JavaScript 做到这一点:
var myStaticFn = function() { /* ... */ };
Observable.myStaticFn = myStaticFn;
这可行,但在 TypeScript 中我无法访问 Observable.myStaticFn,因为 myStaticFn 在类 Observable 上是未知的。
如何声明/增加 rxjs5 Module Observable 类,以便以类型安全的方式访问我的函数?
注意:作为一个起点,下面展示了如何将一个非静态函数扩展到 Observable(例如创建一个自定义的 rxjs Operator)的示例,这完全有效,但不是我想要的!
function myOperator(this: Observable<any>): Observable<any> = function(){ /*...*/ };
Observable.prototype.myOperator = myOperator;
declare module "rxjs/Observable" {
interface Observable<T> {
myOperator: typeof myOperator;
}
}
上述方法有效,因为 TypeScript 的 declare 语法允许我将 Observable 视为接口,并且可以扩充/合并接口。但是 TypeScript 没有办法在接口上声明 static 函数。
从Observable 类派生也是不可行的,比如ExtendedObservable,因为我的代码的每个用户都必须在整个项目中使用ExtendedObservable 类型而不是Observable 类型,以及这个概念如果我想在 Observable 上放置不同的静态方法,也会失败,具体取决于导入的模块。
【问题讨论】:
-
现在github.com/Microsoft/TypeScript/issues/14600接口上缺少静态修饰符是一个悬而未决的问题。
标签: javascript typescript static rxjs rxjs5