Свойство 'increment' не существует для типа 'typeof FieldValue'.ts (2339) - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь поместить указанную ниже функцию в файл .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));
}

Эта функция из официальной документации пожарного магазина: https://firebase.google.com/docs/firestore/solutions/counters

Но я получаю эту ошибку:

Свойство 'increment' не существует для типа 'typeof FieldValue'.ts (2339)

Должен ли я добавить некоторые определения типов в мой проект? Я не знаком с тс, поэтому я ценю любую помощь.

p.s. Мой реактивный проект все еще компилируется и разворачивается, но я хочу избавиться от этой ошибки.

редактирование:

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 Ответ

1 голос
/ 05 мая 2019

Предполагая, что вы используете этот модуль npm , который, кажется, имеет свой исходный код здесь , мы можем взглянуть на то, что происходит:

(1) В файле index.ts вышеприведенного репозитория мы видим определения типов верхнего уровня. Первое, что я заметил, это то, что они используют старый синтаксис Typescript module (обратите внимание на дату авторского права 2017 года). К счастью, это не должно быть причиной вашей проблемы, и мы видим во включенном интерфейсе, что FieldValue определен и имеет тип type.FieldValue. Обратите внимание, что types включено из @firebase/firestore-types.

(2) Предполагая, что этот модуль имеет свой исходный код здесь , мы можем видеть в файле index.d.ts, что FieldValue является классом с присоединенным increment. Это странно, потому что ваша ошибка говорит о том, что increment не включен.

(3) Поскольку типы на самом деле не находятся в модуле @firebase/firestore npm, возможно, существует проблема зависимости модуля. Однако это не так, поскольку package.json правильно указывает тип модуля в качестве зависимости и использует последнюю версию. Кроме того, они используют последнюю версию Typescript, поэтому проблем не должно быть, если вы слишком.

Основываясь на приведенном выше анализе, я думаю, что мы можем с уверенностью сказать, что в вашей конкретной настройке должны быть некоторые причуды. Примечательно, что вам НЕ нужно делать ничего, кроме включения соответствующих модулей_узлов, чтобы заставить это работать. Вот некоторые дополнительные шаги, которые помогут с отладкой. Пожалуйста, сообщите с вашими результатами:

(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) Вы можете попытаться найти документацию, соответствующую вашей версии пожарного магазина; Я не смог найти ничего полезного при быстром поиске, и я не рекомендовал бы этот тяжелый бой, если вы можете избежать его

(3) Вы можете игнорировать ошибку со старым добрым // @ts-ignore - источником

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...