属性“ increment”在类型“ typeof FieldValue”上不存在。ts(2339)

时间:2019-05-05 14:02:09

标签: typescript google-cloud-firestore

我正在尝试将以下函数放在.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';

1 个答案:

答案 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语句吗?


更新1

因此,npm ls @firebase/firestore的输出非常准确。当链接到的文档假定您使用的是最新代码时,则使用的是较旧的版本。根据api随时间变化的多少以及您在项目中的距离,您可以采用以下几种路径之一:

(1)升级到与文档兼容的firestore版本。不幸的是,目前尚不清楚npm版本与文档之间的关系。最好的选择是运行npm install --save @firebase/firestore@latest,以确保您与当前文档保持一致

(2)您可以尝试查找与您的Firestore版本相对应的文档。在快速搜索中我找不到任何有用的东西,如果可以避免的话,我也不建议您参加这场艰苦的战斗

(3)您可以忽略旧的// @ts-ignore-source

中的错误