我有以下代码:
import mongoose from 'mongoose';
const { ObjectId } = mongoose.Types;
// adds new getter property to ObjectId's prototype
Object.defineProperty(ObjectId.prototype, 'hex', {
get() {
return this.__id || (this.__id = this.toHexString());
},
configurable: true,
enumerable: false,
});
如何向打字稿中的mongoose.Types.ObjectId类添加hex
?
类型的“猫鼬”是通过@types/mongoose
答案 0 :(得分:2)
我们可以使用模块扩充来向ObjectId
添加属性。在这种情况下,问题在于找到ObjectId
实际所在的位置。
如果我们查看mongoose.Types
中var ObjectId: ObjectIdConstructor;
type ObjectIdConstructor = typeof mongodb.ObjectID & {
(s?: string | number): mongodb.ObjectID;
};
的定义,则会发现:
new ObjectId()
所以mongodb.ObjectID
的返回类型实际上是export { ObjectID /* … */} from 'bson';
,所以让我们看一下它的样子:
ObjectID
因此,在这里我们发现'bson'
只是从bson
的重新导出,如果我们查看export class ObjectID { … }
中的定义,我们最终找到了类定义:
import * as mongoose from 'mongoose';
const { ObjectId } = mongoose.Types;
declare module "bson" {
export interface ObjectID {
hex: string
}
}
// adds new getter property to ObjectId's prototype
Object.defineProperty(ObjectId.prototype, 'hex', {
get() {
return this.__id || (this.__id = this.toHexString());
},
configurable: true,
enumerable: false,
});
new ObjectId().hex
将所有内容放在一起,我们得到:
// Zoom in/out clothing img
$('.image').click(function() {
$(this).toggleClass('normal-zoom zoom-in');
});