You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore规则中可选字段类型校验的占位符使用是否正确?

Firestore规则字段类型校验的占位符问题解答

你提供的示例函数里,不同类型的占位符使用存在错误,既不能统一用'',也不是当前示例里的混用方式。正确的逻辑是:docData.get()的默认值必须与你要校验的目标类型一致,这样才能保证「可选字段不存在时校验通过,存在时校验类型匹配」的需求。

正确的占位符使用规则

  • 校验map类型:默认值用{}(空Map),空Map属于map类型,字段不存在时is map返回true
  • 校验int类型:默认值用0(整数类型的默认值),不能用字符串'',否则'' is int会返回false,导致可选字段不存在时校验失败
  • 校验bool类型:默认值用false(布尔类型的默认值),同样不能用''
  • 校验string类型:默认值用''(空字符串)是正确的,空字符串属于string类型
  • 校验list类型:默认值用[](空列表)是正确的,空列表属于list类型

修正后的校验函数

function reviewFieldsAreValidTypes(docData) {
   return docData.get('variableA', {}) is map &&
        docData.get('variableB', {}) is map &&
        docData.get('variableC', 0) is int &&
        docData.get('variableD', false) is bool &&
        docData.get('variableE', '') is string &&
        docData.get('variableF', []) is list;
}

错误写法的问题说明

原示例中用''作为int、bool类型的默认值,会导致:当这些可选字段不存在时,docData.get()返回的是字符串'','' is int和'' is bool都会返回false,直接触发校验失败,违背了「可选字段不存在时允许通过」的设计初衷。

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:45:23