【问题标题】:Typescript Cloud function not compiling打字稿云功能未编译
【发布时间】:2019-05-15 07:27:29
【问题描述】:

我有以下云功能来从 firebase 数据存储中获取数据,但它无法编译并且不知道如何解决这个问题。

import * as admin from 'firebase-admin';
import * as functions from 'firebase-functions';

admin.initializeApp(functions.config().firebase);

const db = admin.firestore();
const usersObj = db.collection('users')

export const getUsers = async () => {
    let allUsers: Array<any> = [];
    await usersObj.get().then(users => {
        users.forEach(user => {
            allUsers[user.id] = user.data();
        });
    });
    return allUsers;
}

错误:错误 TS7015:元素隐式具有“任何”类型,因为 索引表达式不是“数字”类型。 allOrders[order.id] = order.data();

【问题讨论】:

  • user.id 是数字吗?
  • @Héctor 它是一个字符串... GUID
  • 我认为这就是问题所在。数组索引应该是一个数字。您可以将 allUsers 更改为对象,或使用 forEach 索引作为数组索引而不是用户的 GUID

标签: node.js typescript google-cloud-functions


【解决方案1】:

如果要将数组元素转换为新数组,也可以使用Array.map

allUsers = users.map(user => user.data());

【讨论】:

  • 其实我想做的是users.forEach(user =&gt; { allUsers.push({ id: user.id, ...user.data() }); });我不知道怎么用.map来做
  • 类似这样的东西:allUsers = users.map(user =&gt; Object.assign({ id: user.id }, user.data()));
  • 似乎不起作用。收到错误Property 'map' does not exist on type 'QuerySnapshot'.
【解决方案2】:

您不能使用字符串索引数组。要解决它,您可以:

使用forEach索引作为数组索引:

users.forEach((user, i) => {
    allUsers[i] = user.data();
});

或将项目推送到allUsers 数组:

users.forEach(user => {
    allUsers.push(user.data());
});

【讨论】:

  • 太棒了。谢谢...我之前使用过 push,但在修复 allUsers 的其他类型问题时将其删除...
  • 很好,很高兴为您提供帮助
猜你喜欢
  • 2019-08-30
  • 1970-01-01
  • 2021-07-01
  • 2013-08-19
  • 2018-08-13
  • 2019-07-12
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
相关资源
最近更新 更多