我正在尝试将以下函数放在.ts文件中:
function incrementCounter(db, ref, num_shards) {
// Select a shard of the counter at random
const shard_id = Math.floor(Math.random() * num_shards).toString();
const shard_ref = ref.collection('shards').doc(shard_id);
// Update count
return shard_ref.update("count", firebase.firestore.FieldValue.increment(1));
}
此功能来自官方的Firestore文档:https://firebase.google.com/docs/firestore/solutions/counters
但是我收到此错误:
类型为“ typeof FieldValue”的属性不存在“增量”。ts(2339)
我应该在项目中添加一些类型定义吗? 我对ts不熟悉,因此,我感谢您的帮助。
p.s。我的react-native项目似乎仍然可以编译和部署,但是我想摆脱这个错误。
编辑:
tsconfig.json ->我的项目中没有此配置文件。
npm ls | grep firestore
@firebase/firestore@0.5.3
│ │ ├── @firebase/firestore-types@0.4.2
导入语句:
import React from 'react';
import * as firebase from 'firebase';
import 'firebase/firestore';
答案 0 :(得分:1)
假设您使用的npm module似乎具有其源代码here,我们可以看看发生了什么:
(1)在上述存储库的index.ts
文件中,我们可以看到顶级类型定义。我注意到的第一件事是他们正在使用旧的Typescript module
语法(请注意版权日期为2017)。幸运的是,这不应该是导致您出现问题的原因,我们可以在包含的界面中看到FieldValue
被定义并且类型为type.FieldValue
。请注意,types
中包含@firebase/firestore-types
。
(2)假设该模块具有其源代码here,我们可以在index.d.ts
文件中看到FieldValue是附加了increment
的类。这很奇怪,因为您的错误表明未包含increment
。
(3)由于类型实际上不在@firebase/firestore
npm模块中,因此可能存在模块依赖性问题。但是,情况并非如此,因为package.json
正确地将类型模块指定为依赖项并使用最新版本。此外,他们使用的是最新版本的Typescript,所以如果您也是,也应该没有问题。
基于以上分析,我认为我们可以放心地说,您的特定设置中必须有一些怪异之处。值得注意的是,除了包括相关的node_modules之外,您无需执行任何其他操作即可使此工作正常进行。以下是一些有助于调试的其他步骤。请报告您的结果:
(1)您为此项目使用什么版本的Typescript?您可以发布您的tsconfig.json
以及用于编译的命令吗(如果使用更大的捆绑程序实用程序,让我们首先尝试使其在没有捆绑程序的情况下可以正常工作)。
(2)您正在使用哪个版本的@firebase/firestore
?请使用npm ls
进行发现。
(3)您可以在文件顶部发布正在使用的import
语句吗?
因此,npm ls @firebase/firestore
的输出非常准确。当链接到的文档假定您使用的是最新代码时,则使用的是较旧的版本。根据api随时间变化的多少以及您在项目中的距离,您可以采用以下几种路径之一:
(1)升级到与文档兼容的firestore版本。不幸的是,目前尚不清楚npm版本与文档之间的关系。最好的选择是运行npm install --save @firebase/firestore@latest
,以确保您与当前文档保持一致
(2)您可以尝试查找与您的Firestore版本相对应的文档。在快速搜索中我找不到任何有用的东西,如果可以避免的话,我也不建议您参加这场艰苦的战斗
(3)您可以忽略旧的// @ts-ignore
-source