當從mongoose 5.x遷移到6.x時,型別腳本出現了錯誤,特別是UpdateQuery $inc的型別被設定為未定義。我使用的是內置的型別,而不是@types/mongoose 下面是一個例子:
export 介面 PrintSettings extends Document {
_id: String
currentBatch: Number currentBatch: Number
}
const PrintSettingsSchema: Schema<PrintSettings> = new Schema(
{
_id: { type: String },
currentBatch: { type: Number, default: 0, min: 0 },
},
{ timestamps: true }, { timestamps: true }
)
let inc = await PrintSettingsModel.findOneAndUpdate(
{ _id: settingsId },
{ $inc: { currentBatch: }, // <------ 這里是發生錯誤的地方。
{ useFindAndModify: false, new: true }
)
我收到的錯誤是這樣的:
No overload匹配this呼叫。
Overload 1 of 3, '(filter: FilterQuery<PrintSettings>, update: UpdateQuery<PrintSettings>, options: QueryOptions & { rawResult: true; }, callback? : ((err: CallbackError, doc: any, res: any) => void) |未定義)。) Query<...>',給出了以下錯誤。
型別 '{ currentBatch: number; }'不能分配給型別'undefined'。
Overload 2 of 3, '(filter: FilterQuery<PrintSettings>, update: UpdateQuery<PrintSettings>, options: QueryOptions & { upsert: true; } & ReturnsNewDoc, callback?: ((err: CallbackError, doc: PrintSettings, res: any) => void) |未定義)。) Query<...>',給出了以下錯誤。
型別 '{ currentBatch: number; }'不能分配給型別'undefined'。
過載 3 的, '(filter? : FilterQuery<PrintSettings> | undefined, update? UpdateQuery<PrintSettings> | undefined, options? 查詢選項 | null | 未定義, 回呼? : ((err: CallbackError, doc: PrintSettings | null, res: any) => void) |未定義)。) Query<...>',給出了以下錯誤。
型別 '{ currentBatch: number; }'不能分配給型別'undefined'。 ts(2769)
index.d.ts(2576, 5) 。預期的型別來自從屬性'$inc',在這里宣告的型別是'UpdateQuery<PrintSettings> '
這是mongoose 6的一個型別錯誤,還是更新或原子增量發生了變化?
uj5u.com熱心網友回復:
這個問題是你的PrintSettings介面的套管問題。這些型別希望PrintSettings.currentBatch是下列之一:
type _UpdateQuery<TSchema> = {
/ ...
$inc? OnlyFieldsOfType<TSchema, NumericTypes | undefined> & AnyObject;
//...。
}
type NumericTypes = number | Decimal128 | mongodb. Double | mongodb.Int32 | mongodb.Long。
你使用的是Number而不是number,注意小寫的 "n"。下面的方法可行:
export 介面 PrintSettings extends Document {
_id: string;
currentBatch: number;
基本上,對于介面使用日常型別。這與傳遞給Schema的型別略有不同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/331057.html
標籤:
下一篇:獲取當前url路徑
