显示触发Firestore(onUpdate)打字稿错误的Firebase云功能时

时间:2019-06-05 00:22:49

标签: firebase google-cloud-firestore google-cloud-functions

exports.archiveChat = functions.firestore
                     .document('chats/{chatId}')
                     .onUpdate( snap => {
                        const data= snap.after.data();
                        const maxLen = 100;
                        const msgLen =  data.messages.length;
                        const charLen = JSON.stringify(data).length;
                        const batch = db.batch()

                        if( charLen >= 10000 || msgLen >= maxLen){
                            const deleteCount = msgLen - maxLen <= 0 ? 1 : msgLen - maxLen 

                          data.messages.splice(0,deleteCount);

                            const ref =  db.collection("chats").doc(snap.after.id)

                          batch.set( ref, data ,{ merge : true });
                             return  batch.commit();
                        } else{
                            return null;
                        }
                        })
不推荐使用

no-before-declare。从TypeScript 2.9开始。请改用内置的编译器检查。 运行命令:npm --prefix“ $ RESOURCE_DIR”运行构建

  

functions @ build / Users / thedkn / Desktop / cmeraApp1 / functions   tsc

src / index.ts:39:45-错误TS2532:对象可能是“未定义”。

39 const msgLen = data.messages.length;                                                ~~~~

src / index.ts:46:31-错误TS2532:对象可能是“未定义”。

46个data.messages.splice(0,deleteCount);                                  ~~~~

src / index.ts:50:47-错误TS2345:类型为'DocumentData |未定义”不能分配给“ DocumentData”类型的参数。   无法将“未定义”类型分配给“ DocumentData”类型。

50 batch.set(ref,data,{merge:true});                                                  ~~~~

发现3个错误。

npm错误!代码ELIFECYCLE npm ERR!错误2 npm ERR! functions @ build:tsc npm ERR!退出状态2 npm ERR! npm ERR!在functions @构建脚本上失败。 npm ERR! npm可能不是问题。上面可能还有其他日志记录输出。

npm错误!可以在以下位置找到此运行的完整日志: npm ERR! /Users/thedkn/.npm/_logs/2019-06-05T00_10_17_788Z-debug.log

错误:函数预部署错误:命令以非零退出码2终止 Dhirajs-Air:功能thedkn $

1 个答案:

答案 0 :(得分:0)

const data= snap.after.data()在没有“之后”快照的情况下可以返回undefined。只要您为TypeScript编译器启用了严格模式,您的代码就需要检查这一点。

const data= snap.after.data()
if (data) {
    // now it's safe to use data because it's certain to be defined
}