我有一个简单的类,它有一个方法set
,它抽象了Firebase的 set 功能。 set方法是:
/** set a "value" in the database at a given path */
public async set<T = any>(path: string, value: T): Promise<void> {
return this.ref(path)
.set(value)
.catch((e: any) =>
this.handleError(e, "set", `setting value @ "${path}"`)
);
}
如果我使用标准客户端打字库,从打字的角度来看这很好:
import * as client from "@firebase/database";
import * as admin from "firebase-admin";
export type Reference = client.Reference;
/** Get a DB reference for a given path in Firebase */
public ref(path: string): Reference {
return this._mocking
? this.mock.ref(path)
: RealTimeDB.connection.ref(path);
}
如果我使用Admin API的参考输入:
,也可以export type Reference = client.Reference;
但是,由于此类应由使用客户端和服务器,我想将Reference
定义为:
export type Reference = admin.database.Reference | client.Reference;
但是当我这样做时,VisualCode仍然正确地自动完成我的参考:
但同时我得到一个错误指示器,无论我从引用中选择哪种方法:
[ts]无法调用类型缺少调用签名的表达式。输入&#39;((值:any,onComplete?:( a:错误)=&gt; any)=&gt;承诺)| ((newVal:any,onComplete?:( a:......&#39;没有兼容的呼叫签名。
造成这种情况的原因是什么?