“typeof Schema”类型上不存在属性“virtual”

Posted

技术标签:

【中文标题】“typeof Schema”类型上不存在属性“virtual”【英文标题】:Property 'virtual' does not exist on type 'typeof Schema' 【发布时间】:2018-11-09 21:06:07 【问题描述】:

我正在尝试将 mongoose 架构中的 id 更改为“id”,如此处所示 MongoDB: output 'id' instead of '_id'

复制 ID 字段。

Schema.virtual('id').get(function()
    return this._id.toHexString();
);

// Ensure virtual fields are serialised.
Schema.set('toJSON', 
    virtuals: true
);

我正在使用打字稿,而 Schema 似乎没有“虚拟”方法或“设置”方法,并且关键字“this”也未绑定在此上下文中。谁知道他们的打字稿等价物?

【问题讨论】:

你从哪里得到你的猫鼬类型定义?确定类型的 v4 d.ts 文件确实在 Schema 类型上提供了“虚拟”函数(github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/…,第 740 行)至于“this”上下文,您可能需要在函数签名中指定类型 .get(function (this: any) (或者更合适的,如果你知道类型的话) 找到任何解决方案了吗?我面临同样的虚拟问题,这适用于内部功能 请与我们分享您的代码,您的 Schema 已在其中声明 在我看来,您尝试使用的 Schema 对象不是 Mongoose。请检查是否没有其他同名变量。 【参考方案1】:

这似乎适用于继承

import  Schema  from 'mongoose';

class BaseSchema extends Schema 
  constructor(args) 
    super();

    this.add(args);

    this.virtual('id').get(function(this: any) 
      return this._id.toHexString();
    );

    this.set('toObject', 
      virtuals: true,
    );

    this.set('toJSON', 
      virtuals: true,
    );
  

【讨论】:

谢谢,这对我也有用。它的好处是您也可以在全球范围内使用它。它返回 _id 和 id。对于只想返回 id 的每个人,其中一个选项是将转换函数应用于 set('toJSON') 方法,如下所示:***.com/a/42763286/7372307

以上是关于“typeof Schema”类型上不存在属性“virtual”的主要内容,如果未能解决你的问题,请参考以下文章

vue中的Typescript - 类型'Vue |上不存在属性'validate'元素| Vue [] |元件[]'。

“Vue”类型上不存在属性“x”

Discord.js 指南:Typescript 中的“Client<boolean>”类型上不存在属性“commands”

类型“typeof ...”上不存在属性“use”,类型“typeof”上不存在属性“extend”

TypeScript:类型“”上不存在属性

错误 TS2339:类型“”上不存在属性“包含”