You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何替换@types/mongoose-delete中SoftDeleteModel的原有定义?

如何替换@types/mongoose-delete中的SoftDeleteModel接口定义

问题背景

我在使用mongoose-delete及其类型包@types/mongoose-delete时,发现SoftDeleteModel接口的声明存在问题,尝试通过自定义.d.ts文件扩展类型,但现在出现了两个SoftDeleteModel定义,无法替换原有声明。原类型声明放在MongooseDelete命名空间下,当我尝试在扩展代码中加入该命名空间时,修改完全不生效,猜测是泛型参数结构不一致导致生成了重载而非替换。

原类型声明片段:

import mongoose = require("mongoose");

declare namespace MongooseDelete {
    interface SoftDeleteModel<
        T extends Omit<mongoose.Document, "delete">,
        // ... 其他泛型参数
    > extends mongoose.Model<T> {
        // ... 原有方法声明
    }
}

我的尝试代码(仅产生新增定义,无法替换):

// mongoose-soft-delete.d.ts
import mongoose from 'mongoose';
import 'mongoose-delete';

declare module 'mongoose-delete' {
  interface SoftDeleteModel<
    T,
    //.. 剩余泛型参数
  >
}

解决方案

要替换原有接口而非新增,必须严格匹配原类型的命名空间和泛型参数结构,利用TypeScript的声明合并特性实现覆盖:

关键步骤

  1. 定位正确的命名空间:原SoftDeleteModel属于MongooseDelete命名空间,扩展时必须在该命名空间内重新定义接口。
  2. 匹配泛型参数结构:泛型参数的数量、约束条件、默认值必须和原声明完全一致,否则TypeScript会将其视为新接口,导致重复定义。
  3. 继承并覆盖原有声明:重新定义接口时,继承原基础类型(如mongoose.Model),然后覆盖需要修正的方法或属性。

正确的扩展代码示例

创建mongoose-soft-delete.d.ts文件,内容如下:

import mongoose from 'mongoose';
import 'mongoose-delete';

declare module 'mongoose-delete' {
  namespace MongooseDelete {
    // 完全匹配原接口的泛型参数结构与约束
    interface SoftDeleteModel<
      T extends Omit<mongoose.Document, "delete">,
      QueryHelpers = {},
      DocType = T
    > extends mongoose.Model<T, QueryHelpers, DocType> {
      // 覆盖原有delete方法的类型声明,示例修正
      delete(conditions: mongoose.FilterQuery<T>, options?: { permanent?: boolean }): Promise<T | null>;
      
      // 新增或修改其他需要调整的方法/属性
      restore(conditions: mongoose.FilterQuery<T>): Promise<T | null>;
    }
  }
}

注意事项

  • 如果原接口的泛型参数有默认值,必须在扩展时一并声明,保证结构完全匹配。
  • 若原接口继承了其他类型(如mongoose.Model),扩展时也要保持继承关系,避免丢失原有类型特性。
  • 确保你的TypeScript配置(tsconfig.json)包含了这个自定义.d.ts文件的路径,通常通过include字段指定。

内容的提问来源于stack exchange,提问作者Big Biggums

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 06:42:06