Машинопись Мангуста 6 не позволяет использовать $inc

#typescript #mongodb #mongoose #node-modules

Вопрос:

При переходе с мангуста 5.x на 6.x произошла ошибка с машинописным текстом, в частности, с UpdateQuery $inc, так как тип установлен в неопределенный. Я использую встроенные типы, а не @types/mongoose вот пример:

   export interface PrintSettings extends Document {
    _id: String
    currentBatch: Number
  }
  
  const PrintSettingsSchema: Schema<PrintSettings> = new Schema(
    {
      _id: { type: String },
      currentBatch: { type: Number, default: 0, min: 0 },
    },
    { timestamps: true }
    )
    
    let inc = await PrintSettingsModel.findOneAndUpdate(
      { _id: settingsId },
      { $inc: { currentBatch: 1 } }, // <------ Here is where the error occurs
      { useFindAndModify: false, new: true }
    )
 

Ошибка, которую я получаю, заключается в следующем:

    No overload matches this call.
  Overload 1 of 3, '(filter: FilterQuery<PrintSettings>, update: UpdateQuery<PrintSettings>, options: QueryOptions amp; { rawResult: true; }, callback?: ((err: CallbackError, doc: any, res: any) => void) | undefined): Query<...>', gave the following error.
    Type '{ currentBatch: number; }' is not assignable to type 'undefined'.
  Overload 2 of 3, '(filter: FilterQuery<PrintSettings>, update: UpdateQuery<PrintSettings>, options: QueryOptions amp; { upsert: true; } amp; ReturnsNewDoc, callback?: ((err: CallbackError, doc: PrintSettings, res: any) => void) | undefined): Query<...>', gave the following error.
    Type '{ currentBatch: number; }' is not assignable to type 'undefined'.
  Overload 3 of 3, '(filter?: FilterQuery<PrintSettings> | undefined, update?: UpdateQuery<PrintSettings> | undefined, options?: QueryOptions | null | undefined, callback?: ((err: CallbackError, doc: PrintSettings | null, res: any) => void) | undefined): Query<...>', gave the following error.
    Type '{ currentBatch: number; }' is not assignable to type 'undefined'.ts(2769)
  index.d.ts(2576, 5): The expected type comes from property '$inc' which is declared here on type 'UpdateQuery<PrintSettings>'
 

Является ли это ошибкой типа с мангустом 6 или изменилось обновление или атомарное приращение?

Комментарии:

1. Вы используете встроенное index.d.ts или используете @types/mongoose ? Официальное index.d.ts лицо включает в себя $inc . Можете ли вы проверить этот файл в node_modules мангуста, чтобы увидеть, присутствует ли эта строка?

2. Я просто использую встроенные типы, а не @types/мангуст

3. И если вы зайдете в node_modules мангуста, вы увидите эту строку в index.d.ts?

4. да, я вижу эту строку, файл точно такой же

Ответ №1:

Проблема заключается в оболочке вашего PrintSettings интерфейса. Типы, как ожидается PrintSettings.currentBatch , будут одним из:

 type _UpdateQuery<TSchema> = {
  // ...
  $inc?: OnlyFieldsOfType<TSchema, NumericTypes | undefined> amp; AnyObject;
  // ...
}

type NumericTypes = number | Decimal128 | mongodb.Double | mongodb.Int32 | mongodb.Long;
 

Вы используете Number вместо number , обратите внимание на строчную букву «n». Следующие работы:

 export interface PrintSettings extends Document {
  _id: string;
  currentBatch: number;
}
 

В основном, для интерфейса используются повседневные типы. Который немного отличается от типов, переданных в Schema .

Комментарии:

1. В версии 5.x ввод текста дал бы мне ошибку, если бы я использовал число вместо числа, но я рад, что теперь это исправлено! Спасибо.