数值在firestore中保存为字符串

时间:2018-02-14 20:16:51

标签: typescript google-cloud-firestore

我使用此函数将数据发送到firestore

exports.professional = functions.https.onRequest((request, response) => {
    const db = admin.firestore();

    const userId: string = request.body['userId'];
    const qualificationId: number = request.body['qualificationId'];
    const occupationId: number = request.body['occupationId'];
    const employmentType: EMPLOYMENT_TYPE = request.body['employmentType'];
    const collegeOrInstitution: string = request.body['collegeOrInstitution'];

    return db.collection('profiles').doc(userId)
        .set(
        {
            professional: {
                qualifaicationId: qualificationId,
                occupationId: occupationId,
                employmentType: employmentType,
                collegeOrInstitution: collegeOrInstitution
            }
        },
        {
            merge: true
        }).then(writeResult => {
           return response.json(
                {
                    status: 1,
                    message: 'Professional details saved successfully',
                    result: userId
                }
            )
        });
});

我已将某些变量声明为数字,但是当我检查firestore doc时, 它保存为字符串。请看截图

Screenshot

在代码中,我已将occupationId声明为数字变量,但在保存之后它是一个字符串,请再次查看屏幕截图。有人知道为什么会改变数据类型吗?

2 个答案:

答案 0 :(得分:4)

声明,例如:

const occupationId: number
如果赋值类型为any(完成后可以逐步从js切换到ts),

本身不会转换传递的数据。

如果您需要明确地使用数字 - 您需要使用能够为您转换实际值类型的内容。

一种可能的方法:

const occupationId: number = Number(request.body['occupationId']);

参考文献:

答案 1 :(得分:1)

设置对象的值时,必须检查该值是有效数字还是字母,如果是有效数字,则必须将其转换为正确的数字格式,否则只需传递变量就这样。

+value || value

示例:

const apple = "Apple"
const amount = "5"
const getRealValue = (val) => +val || val

console.log(getRealValue(apple))
console.log(getRealValue(amount))

console.log(typeof getRealValue(apple))
console.log(typeof getRealValue(amount))

通过这种方式,您可以让Firestore了解您的数据类型,并可以在遍历Object.keys的过程中对所有对象变量执行此过程