Dyn*_*lon 2 javascript static rxjs typescript rxjs5
我想Observable用静态函数扩展 rxjs5类。我可以用纯 JavaScript 做到这一点:
var myStaticFn = function() { /* ... */ };
Observable.myStaticFn = myStaticFn;
Run Code Online (Sandbox Code Playgroud)
这是有效的,但在 TypeScript 中我无法访问,Observable.myStaticFn因为myStaticFnclass 中不知道该属性Observable。
如何声明/增强 rxjs5 ModuleObservable类,以便我可以以类型安全的方式访问我的函数?
注意:作为起点,下面展示了如何将非静态函数扩展到 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;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的方法是有效的,因为declareTypeScript的语法允许我把它Observable当作一个接口,并且接口可以被扩充/合并。但是 TypeScript 无法在接口上声明静态函数。
从Observable类派生也是不可行的,ExtendedObservable因为我的代码的每个用户都必须ExtendedObservable在Observable整个项目中使用类型而不是类型,如果我想在 Observable 上放置不同的静态方法,这个概念也会失败,具体取决于在导入的模块上。
我在查看RxJS 源代码中静态.from()扩展的实现时发现了这一点:
import { myStaticFn as myStaticFnStatic } from "./myStaticFn";
declare module "rxjs/Observable" {
namespace Observable {
let myStaticFn: myStaticFnStatic;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意我如何导入myStaticFn但将其本地化为名称myStaticFnStatic- 这是必需的,否则会出现编译器错误。
| 归档时间: |
|
| 查看次数: |
1139 次 |
| 最近记录: |