在 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
}
}
扩展现有界面
我在我的 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,您的用户也将受益于扩展的第三方界面。
我目前正在为 mongoose 编写一个插件。现在,当我使用 TypeScript 时,我遇到了以下情况。我必须扩展现有的界面。这没问题。为了完整起见,我还是把它写下来
src/typings/mongoose.d.ts
declare module 'mongoose' {
export interface SomeExistingMongooseInterface {
MyNewOption?: FancyOptionInterface
}
}
扩展现有界面
我在我的 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,您的用户也将受益于扩展的第三方界面。