将模糊搜索与猫鼬一起使用时出现打字稿错误

Posted

技术标签:

【中文标题】将模糊搜索与猫鼬一起使用时出现打字稿错误【英文标题】:Typescript error when using fuzzySearch with mongoose 【发布时间】:2020-07-09 05:26:05 【问题描述】:

在我的猫鼬模式中,我使用如下库:https://github.com/VassilisPallas/mongoose-fuzzy-searching

UserSchema.plugin(mongoose_fuzzy_searching,  fields: ['name'] );

然后在服务中我这样使用它:

export function fuzzySearchUser(name: string): Query<Array<IUser>>
    return User.fuzzySearch(name)

现在在上面的返回行中得到以下 Typescript 错误:

Property 'fuzzySearch' does not exist on type 'Model<IUser, >'.ts(2339)

如果我将它作为具有类型函数的属性添加到 IUser 接口并且我也无法将其添加到架构中,这将无济于事。

(接口 IUser 扩展了 mongoose.Document)

【问题讨论】:

【参考方案1】:

你需要创建一个打字文件,因为这个库不提供打字。试试这个。

typings/mongoose-fuzzy-search

declare module 'mongoose-fuzzy-search' 
  import  Document, DocumentQuery, Model, Schema  from 'mongoose'

  export interface MongooseFuzzyOptions<T> 
    fields: (T extends Object ? keyof T : string)[]
  

  export interface MongooseFuzzyModel<T extends Document, QueryHelpers = >
    extends Model<T, QueryHelpers> 
    fuzzySearch(
      search: String,
      callBack?: (err: any, data: Model<T, QueryHelpers>[]) => void
    ): DocumentQuery<T[], T, QueryHelpers>
  

  function fuzzyPlugin<T>(schema: Schema<T>, options: MongooseFuzzyOptions<T>): void

  export default fuzzyPlugin

然后使用 MogooseFuzzyModel 声明您的模型:

export const User = mongoose.model<UserModel>('User', UserSchema) as MongooseFuzzyModel<UserModel>

【讨论】:

以上是关于将模糊搜索与猫鼬一起使用时出现打字稿错误的主要内容,如果未能解决你的问题,请参考以下文章

无法将猫鼬虚拟与打字稿一起使用

无法将猫鼬虚拟与打字稿一起使用

使用 React useContext 和 useReducer 时出现打字稿错误

在带有 loadClass 的打字稿中使用 es6 类和猫鼬

实现 ionic 的本机 HTTP 拦截器时出现打字稿错误

编译节点模块时出现打字稿错误