Sam*_*ta1 9 firebase typescript google-cloud-functions
我试图直接从javascript SDK调用firebase函数,并且firebase上没有定义functions属性.
我已更新到firebase模块的4.12.1版
我正在使用打字稿并导入模块如下
import * as firebase from 'firebase';
import * as functions from 'firebase/functions';
Run Code Online (Sandbox Code Playgroud)
我试图调用我的函数:
firebase.functions().httpsCallable('myFunc')(payload)
Run Code Online (Sandbox Code Playgroud)
这导致编译器错误:
"typeof firebase"类型中不存在属性"函数".
根据文档,应该如何调用它们:https://firebase.google.com/docs/functions/callable
如果我用常规导入替换导入一切正常
const firebase = require('firebase');
const functions = require('firebase/functions');
Run Code Online (Sandbox Code Playgroud)
类型定义是否存在已知问题,或者我在这里做错了什么?
我遇到了同样的问题......
看起来firebase JS SDK的当前版本4.12.1中的@firebase/*类型包存在问题.它们根本不包含在node_modules/firebase/app/index.d.ts和node_modules/firebase/index.d.ts中.似乎有一个针对该问题的分支"构建修复".
更新:分支已合并,但无法修复.我在这里添加了一个专门的pull请求:https://github.com/firebase/firebase-js-sdk/pull/724最近已经合并,期待下一个版本中的更改> 4.13.1
我通过将https://github.com/mpoehler/firebase-js-sdk/blob/master/packages/functions-types/index.d.ts中的Type声明添加到node_modules/firebase/app/index.d来修复它..TS.这样做我能够使用以下代码,没有错误,并在VSC中键入建议.
import * as firebase from 'firebase/app';
import '@firebase/functions';
firebase.initializeApp({
...
});
// call function
let func = firebase.functions().httpsCallable('myFunc');
func({text: 'huch'}).then(result => console.log('...and returned!'));
Run Code Online (Sandbox Code Playgroud)
这更像是一个肮脏的黑客,而不是一个解决方案,我希望上面提到的公关将很快合并.
根据@jbb的要求,以下是node_modules/firebase/app/index.d.ts中需要的重要部分:
declare namespace firebase {
....
function functions(app?: firebase.app.App): firebase.functions.FirebaseFunctions;
...
}
declare namespace firebase.app {
interface App {
...
functions(): firebase.functions.FirebaseFunctions;
...
}
}
declare namespace firebase.functions {
export interface HttpsCallableResult {
readonly data: any;
}
export interface HttpsCallable {
(data?: any): Promise<HttpsCallableResult>;
}
export class FirebaseFunctions {
private constructor();
httpsCallable(name: string): HttpsCallable;
}
export type FunctionsErrorCode =
| 'ok'
| 'cancelled'
| 'unknown'
| 'invalid-argument'
| 'deadline-exceeded'
| 'not-found'
| 'already-exists'
| 'permission-denied'
| 'resource-exhausted'
| 'failed-precondition'
| 'aborted'
| 'out-of-range'
| 'unimplemented'
| 'internal'
| 'unavailable'
| 'data-loss'
| 'unauthenticated';
export interface HttpsError extends Error {
readonly code: FunctionsErrorCode;
readonly details?: any;
}
}
Run Code Online (Sandbox Code Playgroud)
我相信你想要:
import * as firebase from 'firebase/app'
import 'firebase/functions'
firebase.initializeApp({/* ... */});
const myFn = firebase.functions().httpsCallable('myFn');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1076 次 |
| 最近记录: |