2015-10-06 33 views
1

我似乎无法弄清楚我在这里做错了什么。 我想延长我的火力地堡对象与原型方法Typescript Node.js原型不会编译

但是我得到:

Property 'foo' does not exist on type 'Firebase'

/// <reference path="./tsd.d.ts"/> 
import Firebase = require('firebase'); 
interface Firebase { 
    foo :() => string 
} 

Firebase.prototype.foo = function(): string { 
    return "foo"; 
} 

var myRootRef = new Firebase('myUrl'); 
firebase.foo() // property 'foo' does not exist on type 'Firebase'. 
+0

你有没有试过普通课堂延伸? 'MyFirebase类扩展了Firebase {foo(){}}'。或者说,我的问题是,它需要放在Firebase对象上吗? – thoughtrepo

+0

我想尽可能地避免继承。接口更好。 –

回答

2

其实我解决它。我意识到我需要在custom.d.ts的Firebase中declare

/// <reference path="../firebase/firebase.d.ts"/> 
/// <reference path="../rx/rx.d.ts"/> 
/// <reference path="../rx/rx-lite.d.ts"/> 

interface Firebase { 
    rx_observe : (eventType: string) => Rx.Observable<FirebaseDataSnapshot> 
} 

declare var fb : Firebase 

declare module 'custom' { 
    export = fb 
} 

现在我包含我的原型声明。

import Firebase = require('firebase'); 
import Rx = require('rx'); 

Firebase.prototype.__proto__.rx_observe = function(eventType: string): Rx.Observable<FirebaseDataSnapshot> { 
    var self: Firebase = this; 
    return Rx.Observable.create<FirebaseDataSnapshot>(observer => { 
     var listener = self.on(eventType, (snapshot) => { 
      observer.onNext(snapshot); 
     }) 
     return() => { 
      self.off(eventType, listener); 
     } 
    }); 
}