Typescript Node.js原型不会编译

时间:2015-10-06 15:50:40

标签: node.js compilation typescript firebase

我似乎无法弄清楚我在这里做错了什么。 我想用原型方法扩展我的Firebase对象

但是我得到了:

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'.

2 个答案:

答案 0 :(得分:3)

由于代码中有import

import Firebase = require('firebase');

您的文件现在是一个模块,interface Firebase {与全局命名空间断开连接。将此声明移动到global.d.ts文件中。

更多:请参阅修改原生类型:https://basarat.gitbooks.io/typescript/content/docs/types/lib.d.ts.html

答案 1 :(得分:2)

我实际上解决了它。我意识到我需要在declare Firebase中custom.d.ts

/// <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);
        }
    });
}