代码之家  ›  专栏  ›  技术社区  ›  honor

类型“Type FieldValue:Ts(2339))不存在属性“增量”。

  •  0
  • honor  · 技术社区  · 6 年前

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

    但我有个错误:

    类型“Type FieldValue:Ts(2339))不存在属性“增量”。

    我应该在我的项目中添加一些类型定义吗? 我不熟悉TS,所以我很感激您的帮助。

    另外,我的react本机项目似乎仍然在编译和部署,但我想消除这个错误。

    编辑:

    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';
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Jclangst    6 年前

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

    (1)在 index.ts 在上面的repo文件中,我们可以看到顶级的类型定义。我注意到的第一件事是他们正在使用旧的字体 module 语法(注版权日期为2017年)。幸运的是,这不应该是问题的原因,我们可以在包含的接口中看到 FieldValue 定义并具有 type.FieldValue . 请注意 types 包含自 @firebase/firestore-types 是的。

    (2)假设该模块有其源代码 在这里 ,我们可以在 index.d.ts fieldvalue是 increment 附属的。这很奇怪,因为你的错误说 增量 不包括在内。

    (3)由于类型实际上不在 @firebase/firestore NPM模块,可能存在模块依赖性问题。然而,情况并非如此 package.json 将类型模块正确指定为依赖项并使用最新版本。另外,他们使用的是最新版本的typescript,所以如果你也使用的话就不会有问题了。

    基于以上的分析,我想我们可以肯定地说,在您的特定设置中一定有一些怪癖。值得注意的是,除了包含相关的node_模块之外,您不必做任何其他事情。下面是一些有助于调试的附加步骤。请报告您的结果:

    (1)您在这个项目中使用的是什么版本的typescript?你能把你的 tsconfig.json 以及用于编译的命令(如果使用更大的bundler实用程序,我们首先尝试让它在没有bundler的情况下工作)。

    (2)什么版本的 @消防基地/消防仓库 你在用吗?请使用 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