Node.js 在index.d.ts npm模块中包括自定义键入

Node.js 在index.d.ts npm模块中包括自定义键入,node.js,typescript,interface,transpiler,Node.js,Typescript,Interface,Transpiler,我目前正在写一个插件。现在,当我使用TypeScript时,我有以下情况。我必须扩展现有的接口。这没问题。为了完整起见,我将把它写下来 src/typings/mongoose.d.ts declare module 'mongoose' { export interface SomeExistingMongooseInterface { MyNewOption?: FancyOptionInterface } } declare module 'mongoose' { e

我目前正在写一个插件。现在,当我使用TypeScript时,我有以下情况。我必须扩展现有的接口。这没问题。为了完整起见,我将把它写下来

src/typings/mongoose.d.ts

declare module 'mongoose' {
  export interface SomeExistingMongooseInterface {
    MyNewOption?: FancyOptionInterface
  }
}
declare module 'mongoose' {
  export interface SomeExistingMongooseInterface {
    MyNewOption?: FancyOptionInterface
  }
}
import "./types/mongoose"
将通过以下方式扩展现有接口:

我将typeRoot包含在我的tsconfig中

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
  }
}
declare module 'mongoose' {
  export interface SomeExistingMongooseInterface {
    MyNewOption?: FancyOptionInterface
  }
}
import "./types/mongoose"
第二步是在应用程序中导入此文件。我只是觉得在根文件中添加它很方便,所以

src/index.ts

declare module 'mongoose' {
  export interface SomeExistingMongooseInterface {
    MyNewOption?: FancyOptionInterface
  }
}
declare module 'mongoose' {
  export interface SomeExistingMongooseInterface {
    MyNewOption?: FancyOptionInterface
  }
}
import "./types/mongoose"
这已经是事实了。没什么可做的了。构建应用程序时,typescript编译器现在将在dist/src/types文件夹中生成一个mongoose.d.ts文件,随后将发布该文件

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