打字稿:如何扩展现有的模块定义?

时间:2020-02-03 20:46:20

标签: javascript node.js typescript mongoose

我有一个为扩展npm包而编写的声明文件,但是好像没有声明一个方法,我尝试声明它,但是得到一个错误。请帮助我。

现有d.ts文件的结构:

declare module "mongoose" {
...
  class Document {}
  interface Document extends MongooseDocument, NodeJS.EventEmitter, ModelProperties {
    increment(): this;
    remove(fn?: (err: any, product: this) => void): Promise<this>;
    ...
  }
}

我尝试将Document方法的deleteOne添加到接口。我的custom.d.ts:

declare module "mongoose" {
  interface Document {
    deleteOne(fn?: (err: any, product: this) => void): Promise<this>;
  }
}

但是我仍然收到错误消息“属性'deleteOne'在类型上不存在”。

如果需要,这是我的tsconfig.json:

{
    "compilerOptions": {
      "module": "commonjs",
      "removeComments": true,
      "esModuleInterop": true,
      "moduleResolution": "node",
      "allowJs": true,
      "allowSyntheticDefaultImports": true,
      "pretty": true,
      "resolveJsonModule": true,
      "sourceMap": true,
      "target": "ES2018",
      "outDir": "dist",
      "baseUrl": ".",
      "paths": {
          "*": [
              "node_modules/*"
          ]
      }
    },
    "include": [
      "src/**/*"
    ],
    "exclude": [
      "node_modules",
      "dist",
      "**/*.spec.ts"
    ]
  }

位于'src /'目录中的我的custom.d.ts文件。

谢谢!

2 个答案:

答案 0 :(得分:1)

定义猫鼬界面

cv2.__version__

用法

// types/mongoose/index.d.ts
declare module 'mongoose' {
  namespace Mongoose {
    export interface MyInterface {
      name: number;
    }
  }
}

我还向我的tsconfig文件中添加了// app.ts import mongoose, { Mongoose } from 'mongoose'; const a: Mongoose.MyInterface = { name: 122 };

有此帮助

答案 1 :(得分:0)

好!现在,我知道这是ts-node的预期行为:
https://github.com/TypeStrong/ts-node#help-my-types-are-missing
我已经在tsconfig.json中配置了路径设置,现在一切正常:

    "paths": {
        "mongoose": ["src/custom.d.ts"],
        "*": [
            "node_modules/*"
        ]
    }