【问题标题】:Typescript Node.js Prototype Won't CompileTypescript Node.js 原型无法编译
【发布时间】:2023-03-11 08:21:01
【问题描述】:

我似乎无法弄清楚我在这里做错了什么。 我想用原型方法扩展我的 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'.

【问题讨论】:

  • 你尝试过常规类扩展吗? class MyFirebase extends Firebase { foo(){} }。或者我的问题是,它是否需要在 Firebase 对象上?
  • 我想尽可能避免继承。界面更好。

标签: node.js compilation typescript firebase


【解决方案1】:

由于您的代码中有import

import Firebase = require('firebase');

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

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

【讨论】:

    【解决方案2】:

    我真的解决了。我意识到我需要 declarecustom.d.ts 那个 Firebase 中。

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

    【讨论】:

      猜你喜欢
      • 2017-12-09
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 2016-12-18
      • 2017-12-06
      • 1970-01-01
      • 2018-01-23
      • 2016-04-03
      相关资源
      最近更新 更多