firebase 使用Typescript定义Cloud函数的输入和输出参数

9gm1akwq  于 2022-12-14  发布在  TypeScript
关注(0)|答案(1)|浏览(113)

当客户端通过React应用程序调用时,我使用Firebase Cloud Functions来执行服务器端代码。我有许多不同的函数,每个函数都采用不同的输入参数,并返回一个具有各种属性的data对象。
我想创建一个名为useFirebaseFunctions.ts的钩子,使用它可以发出请求,在这样做的过程中,可以看到函数所需的所有输入参数,以及预期的输出结果。
在我的钩子中,我写了下面的函数:

async function generateReport({ organisationId, projectId }: {
    organisationId: string;
    projectId: string;
}): Promise<{
    data: {
        id: string;
        fileName: string;
        numOfRows: number;
        createdOn: number;
    };
}> {
    const request = httpsCallable(functions, 'adminFunctions-generateReport');
    return request({ organisationId, projectId });
}

对于adminFunctions-generateReport函数,参数为:
| 输入|输出量|
| - -|- -|
| 组织ID:串|id:字符串|
| 项目ID:字符串|文件名:字符串|
| | 行数:数字|
| | 创建时间:编号|

问题

但是,TypeScript会在return request({...)};行上显示错误:
无法将类型“HttpsCallableResult”分配给类型“{ data:{ id:字符串;文件名:字符串;行数:数量;创建日期:编号;};}“。属性”data“的类型不兼容。类型”{}“缺少类型”{ id:字符串;文件名:字符串;行数:编号;创建时间:数字;}“:ID、文件名、行数、创建时间
如何正确键入函数以获得预期的行为而不出错?

gj3fmq9x

gj3fmq9x1#

我找到了解决方案。我将函数重新声明为:

async function generateReport({ ...params }: {
    organisationId: string;
    projectId: string;
}) {
    interface ResInterface {
        id: string;
        fileName: string;
        numOfRows: number;
        createdOn: number;
    };

    const response = httpsCallable<any, ResInterface>(functions, 'adminFunctions-generateReport');
    return (await response({ ...params })).data;
};

相关问题