如何使用TypeScript

时间:2019-06-10 00:40:07

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

我想使用在Typescript中键入的cloud Function更新Firestore中的地图,所以我编写了这段代码,但是它不起作用:

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

admin.initializeApp(functions.config().firebase);
exports.sendNote = functions.https.onCall(async(data,context)=>{
const numeroSender: string = data['numeroSender'];
const amisA = admin.firestore().collection('Amis').doc(numeroReceiver);
const connaissanceABBA:number = 3.0;
const version:number = 1;
await amisA.update({
           'amis.${numeroSender}' : [connaissanceABBA,version]
        });
});

编辑器不会用其值替换numeroSender,我也尝试使用:

'amis.'+numeroSender

并且编辑器正在询问分号并显示许多其他错误。 甚至我也尝试过这种方式:

const mapA: string = ("amis."+numeroSender);
console.log(mapA);
await amisA.update({
            mapA : [connaissanceABBA,version]
        });

控制台显示正确的字符串,但更新功能不会读取mapA值,而是使用字符串'mapA'执行。

1 个答案:

答案 0 :(得分:1)

您可以这样做:

"3"

在ES6中(因此也在TypeScript中),您可以使用 ComputedPropertyName ,如语言规范中所示:http://www.ecma-international.org/ecma-262/6.0/#sec-object-initializer


请注意,在ES5中,必须使用方括号表示法执行以下操作:

await amisA.update({
      [`amis.${numeroSender}`] : [connaissanceABBA, version]
});

还要注意,这将与update()方法一起使用,因为“字段可以包含点以引用文档中的嵌套字段”。但是,JavaScript代码中生成的对象可能与您期望的不完全相同。您可以通过以下方式查看它:

var obj = {};
obj[`amis.${numeroSender}`] = [connaissanceABBA, version]; 
amisA.update(obj);

最后请注意,template literals用反引号括起来,例如:

var obj1 = {
          [`amis.${numeroSender}`] : [connaissanceABBA, version]
    }
console.log(JSON.stringify(obj1));

而不是:

`amis.${numeroSender}`

如您的问题所示。