我的实际验证如下所示:

  ".write": true,
   ".validate": "newData.child('name').isString()
     && newData.child('surname').isString()
     && newData.child('age').isNumber()",


但是,age属性是可选的。用户是否可以填写,取决于他的决定。

我的情况是,如何向Firebase说age是可选的,但是如果它存在(用户填写),它必须是一个数字?

Flow或TypeScript(maybe type)中的age?: number之类的东西

谢谢!:)

最佳答案

要使年龄为可选项,请将其验证规则下移至您要验证的特定值:

".write": true,
".validate": "newData.child('name').isString()  && newData.child('surname').isString()"
"age": {
  ".validate": "newData.isNumber()"
}


之所以起作用,是因为验证规则仅在存在数据时才触发,因此,仅在age属性存在时才执行age上的验证,完全符合您的要求。

通常,我建议将类型验证下移到子节点,并仅在较高级别上保留“这些属性必须存在”:

".write": true,
".validate": "newData.hasChildren(['name', 'surname'])",
"name": {
  ".validate": "newData.isString()"
},
"surname": {
  ".validate": "newData.isString()"
},
"age": {
  ".validate": "newData.isNumber()"
}
"$other": {
  ".validate": false
}


上面的最后一个验证可确保只允许使用指定的属性,因此用户无法添加其他数据(您的代码可能不具备处理能力)。

09-10 15:20
查看更多