javascript - TypeScript 接口(interface)是否应该在 *.d.ts 文件中定义

标签 javascript node.js typescript

TypeScript 新手问题。在我们的项目中,我们使用了一些外部 JavaScript 库,我们需要在其中添加 *.d.ts 文件。我理解这个用例以及我们需要这样做的原因。

但是,对于我们自己定义的接口(interface),我的一位开发人员建议我们在 *.d.ts 文件中定义它们,这样我们就可以访问接口(interface)类型,而无需将其导入到需要使用的模块中

例如,我们想为“错误优先回调”函数创建一个接口(interface),以便我们可以在许多领域重用它。

所以不是这个...

export function helloWorldEventually(callback: (err: Error, result: any) => void) {
  callback(null, 'Hello World');
}

我们可以像这样为错误第一次回调定义一个接口(interface)...

export interface ErrorFirstCallback {
  (err: Error, result: any): void;
}

然后像这样使用它......

export function helloWorldEventually(callback: ErrorFirstCallback) {
  callback(null, 'Hello World');
}

一开始我只是在ErrorFirstCallback.ts中定义了ErrorFirstCallback接口(interface),为了引用而引入。

另一位开发人员建议我们放入一个 *.d.ts 文件,然后我们就不需要导入它来引用它了。

我们定义的接口(interface)什么时候应该在 *.d.ts 文件中定义而不是在 *.ts 文件中定义。

谢谢!

最佳答案

声明文件描述了外部 JavaScript 库的形式。例如,将 jQuery 与 $ 一起使用将导致没有声明文件的 TypeScript 错误,因为 $JQuery 未定义。因此声明文件创建一个接口(interface),所以编译器知道“如果这个变量是 JQuery 类型,它必须有函数 x、y、z”

当为你的项目创建接口(interface)时,你应该把它们放在任何你喜欢的地方:在一个大的接口(interface)文件中,在每个接口(interface)的单独文件中,或者在它可能所属的文件中,但是在声明文件中会会很不方便。

我个人喜欢为每个模块/类/接口(interface)创建单独的文件。但这只是一个品味问题。

考虑创建声明文件的唯一一件事是让其他开发人员有可能在他们的项目中使用您的最终 JavaScript 文件(不是 TypeScript!)。

关于javascript - TypeScript 接口(interface)是否应该在 *.d.ts 文件中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37871217/

相关文章:

javascript - 具有特定顺序的 C3JS 条形图

Javascript - 使用新的异步函数等待异步函数

node.js - 使用socket.io连接到iOS7上的Nodejs服务器

node.js - 如何从react.js发送数据到node?

node.js - 如何捕获所有类型的 Sequelize 错误

typescript - 带有类型谓词的参数的窄类型

javascript - Rails 4 Ajax 调用只能运行一次

javascript - 需要javascript检查夏威夷阿拉斯加等的邮政编码

typescript - 为什么这不是语法/编译时错误?

typescript - 如何调试在 vscode/vs2015 中使用 webpack 捆绑的 typescript 代码