在 index.d.ts npm 模块中包含自定义类型

Include custom Typings in index.d.ts npm module

我目前正在为 mongoose 编写一个插件。现在,当我使用 TypeScript 时,我遇到了以下情况。我必须扩展现有的界面。这没问题。为了完整起见,我还是把它写下来

src/typings/mongoose.d.ts

declare module 'mongoose' {
  export interface SomeExistingMongooseInterface {
    MyNewOption?: FancyOptionInterface
  }
}

将通过Declaration Merging

扩展现有界面

我在我的 tsconfig 中包含 typeRoot

tsconfig.json

"compilerOptions" : {
  ...
  "typeRoots": {
    "src/types",
    "node_modules/@types"
  }
}

在构建我的 npm 模块时,我也使用 --declare 标志来导出类型。现在的问题是,找不到自定义类型。当然,我可以手动将它的内容添加到我的 ./dist/index.d.ts 中,这会起作用,但这不是一个真正的选择,因为它不能自动化并且会留下很大的错误空间。

是否有任何最佳实践以与 typescript 编译器或至少一个 npm 模块一起工作的方式来处理这个问题?

好的。我终于让它工作了。这是我为实现

所做的

您的 npm 模块中第三方 npm 模块的自定义类型

不是编写 .d.ts 文件,而是切换到常规 .ts 文件。所以就我而言

src/types/mongoose.ts

declare module 'mongoose' {
  export interface SomeExistingMongooseInterface {
    MyNewOption?: FancyOptionInterface
  }
}

第二步是将此文件导入您的应用程序。我只是发现在根文件中添加它很方便所以

src/index.ts

import "./types/mongoose"

这已经是它了。没什么可做的。在构建应用程序时,typescript 编译器现在将在 [=28= 中生成一个 mongoose.d.ts 文件]dist/src/types之后发布的文件夹

一切都会正常进行,如果您选择将其发布到 npm,您的用户也将受益于扩展的第三方界面。