我目前正在学习TS,我重写了我的旧NodeJS/Express项目。我需要在验证器中引用另一个文档的字段,但是我收到一个错误:
属性'price'不存在类型'{validator: (val: number) =>布尔;}’.ts(2339)。
代码如下:
const tourSchema = new mongoose.Schema({
price: {
type: Number,
required: [true, ' A tour must have a price']
},
priceDiscount: {
validator: function(val: number): boolean {
return val < this.price
},
message: 'Discount price ({VALUE}) should be below regular price'
}
});
这里是错误
可以看到,我需要priceDiscount验证器,但是我不能引用文档中的另一个字段,因为TS不知道这个字段是否存在。我如何使它知道,我想引用同一文档上的另一个字段?
我不知道mongoose如何工作的细节,但如果该代码是正确的,问题是验证器函数将其this
绑定到默认值以外的其他东西。
您可以显式注释该函数以告诉TSthis
的类型,例如
validator: function(this: { price: number }, val: number): boolean {
return val < this.price
},
另外,我在上面的代码中犯了一个错误。正确的代码,有@H的解。B:
const tourSchema = new mongoose.Schema({
price: {
type: Number,
required: [true, ' A tour must have a price']
},
priceDiscount: {
type: Number,
validate: {
validator: function(this: { price: number }, val: number): boolean {
return val < this.price;
}
},
message: 'Discount price ({VALUE}) should be below regular price'
}
});