我使用此函数将数据发送到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时, 它保存为字符串。请看截图
在代码中,我已将occupationId
声明为数字变量,但在保存之后它是一个字符串,请再次查看屏幕截图。有人知道为什么会改变数据类型吗?
答案 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
的过程中对所有对象变量执行此过程