Flow报错:firebase.database.ServerValue.TIMESTAMP属性未找到
解决Flow报错:Property TIMESTAMP (Property not found in object literal)
我之前也碰到过一模一样的Flow报错,核心原因是Flow的类型定义没有正确识别Firebase的ServerValue.TIMESTAMP属性。给你几个实用的解决办法:
1. 手动添加类型断言(快速解决)
最简单的方式是给这个字段加上类型断言,明确告诉Flow这个属性是合法的:
firebase.database().ref(`${Config.ROOT}/transactions/${parentId}/`).push({ credits, date: moment().format('YYYY-MM-DDTHH:mm:ssZZ'), serverTimestamp: firebase.database.ServerValue.TIMESTAMP as any, // 加类型断言跳过检查 params: { value: euros, }, type: 'topUp', details: transactionStatus, })
如果想更严谨一点,可以先定义包含TIMESTAMP的类型再做断言:
type FirebaseServerValue = { TIMESTAMP: number, }; firebase.database().ref(`${Config.ROOT}/transactions/${parentId}/`).push({ // ...其他字段 serverTimestamp: (firebase.database.ServerValue as FirebaseServerValue).TIMESTAMP, })
2. 更新Firebase的Flow类型定义(根治方案)
Flow的类型定义有时候会滞后于Firebase的API更新,你可以尝试重新安装对应版本的类型:
- 如果你用的是Flow官方推荐的
flow-typed工具,执行:
flow-typed install firebase@<你的Firebase版本号>
- 如果是用npm的
@types/firebase包,确保版本和你的Firebase依赖匹配,更新命令:
npm install @types/firebase@latest --save-dev
3. 临时绕过检查(不推荐长期使用)
如果只是想快速推进开发,可以在.flowconfig里添加配置临时忽略这类错误,但这会降低Flow的检查精度:
打开你的.flowconfig文件,在[unsafe]区块里添加:
[unsafe] enable_getters_and_setters=true
或者直接在当前文件顶部添加注释,跳过整个文件的Flow检查:
// @flow ignore
本质上这个错误是因为Flow默认的类型定义里,firebase.database.ServerValue的对象类型没有包含TIMESTAMP这个属性,所以它会判定你在对象字面量里使用了一个不存在的属性。
内容的提问来源于stack exchange,提问作者Francisco Sarmento
相关产品推荐
相关产品推荐

