2015-10-06 37 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); 
     } 
    }); 
}