打字稿:如何在此文档中引用另一个文档的字段?



我目前正在学习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'
}
});

最新更新