【问题标题】:Property 'increment' does not exist on type 'typeof FieldValue'.ts(2339)类型'typeof FieldValue'.ts(2339)上不存在属性'增量'
【发布时间】:2019-05-05 14:02:09
【问题描述】:

我正在尝试将以下函数放入 .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 不熟悉,所以我很感激任何帮助。

附言我的 react-native 项目似乎仍在编译和部署,但我想摆脱这个错误。

编辑:

tsconfig.json -> 我的项目中没有这个配置文件。

npm ls | grep 火库

@firebase/firestore@0.5.3
│ │ ├── @firebase/firestore-types@0.4.2

导入语句:

import React from 'react';
import * as firebase from 'firebase';
import 'firebase/firestore';

【问题讨论】:

  • 请确保您使用的是最新版本的 SDK/NPM 模块。上次我收到此错误消息时,我很难更新所有依赖项,因为其中一些依赖项已固定。

标签: typescript google-cloud-firestore


【解决方案1】:

假设你正在使用这个npm module,它的源代码似乎是here,我们可以看看发生了什么:

(1) 在上述 repo 的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 忽略错误

【讨论】:

  • 我还直接从npm 下载了最新的类型,只是为了确保他们的发布实用程序没有搞砸任何东西,并且一切对我来说都很好。
  • 感谢您的回复。我已经添加了所需的信息。我的项目中没有 tsconfig.json 文件。
  • 非常有帮助。谢谢...我想我可以手动将 tsconfig.json 添加到我的项目中,对吗?另一件事,我不记得安装任何 Firestore 库。我认为我的项目中的版本已经安装了 firebase。您认为我可以通过更新 Firestore 依赖项来破坏我的项目吗?可能我应该尝试升级到最新版本的“firebase”而不是它附带的 firestore?
  • 使用“npm install --save firebase”更新到最新版本的firebase似乎可以解决这个问题。
猜你喜欢
  • 2021-01-10
  • 2019-08-11
  • 2021-08-02
  • 2020-06-02
  • 2022-07-09
  • 2022-10-04
  • 2023-02-07
  • 2020-08-23
  • 2021-12-19
相关资源
最近更新 更多