如何在没有整个模块的情况下将类型导入 Typescript?

Jar*_*rad 1 import node.js npm typescript

我正在用 Typescript 编写一段 Express 中间件。它将作为独立包发布到 npm。我希望能够使用 Express 类型定义我的函数,因为这让我可以使用类型安全进行编写:

function playWithRequest( req: express.Request, res: express.Response, next: express.NextFunction ) {
    req['key'] = 'stuff';
}

module.exports = playWithRequest;
Run Code Online (Sandbox Code Playgroud)

但是,我不需要require('express')自己,并且我想避免import会生成此类require()调用的语句。如何在不导入 express 本身的情况下告诉 Typescript 有关 express 类型的信息?

快速类型由 安装npm install @types/express,因此在node_modules/@types/express/index.d.ts.

dri*_*hev 5

默认情况下,TypeScript 不会将导入转换为 require 语句,该语句在编译文件中没有使用仅 JS 的导出。

所以当你只使用导出的类型时,不会产生 require 调用@types/express

当你制作这样的模块(express只需要@types/express打字)时,你可以安全地放入你的依赖项(不是 devDependencies)并将express模块保存在你的 devDependencies 中(用于编译目的)。

通过在将模块安装到应用程序时执行此操作,它将正确地进行安全类型化,但它不会抱怨 express 不在那里。