node.js - 导出变量 'router' 具有或正在使用来自外部模块的名称 'Router' 但无法命名

标签 node.js express typescript module

在直接使用 Typescript 2 和 @types/express@4.0.35 定义导出路由器时,在多个文件中定义嵌套路由器的常见构造中,代码抛出

error TS4023: Exported variable 'router' has or is using name 'Router' from external module 
         "[...]/node_modules/@types/express-serve-static-core/index" but cannot be named.

示例取自 basarat's answer

import * as express from "express";

// import sub-routers
import * as adminRouter from "./admin/admin";
import * as productRouter from "./products/products";

let router = express.Router();

// mount express paths, any addition middleware can be added as well.
// ex. router.use('/pathway', middleware_function, sub-router);

router.use('/products', productRouter);
router.use('/admin', adminRouter);

// Export the router
export = router;

最佳答案

解决方案是显式注释路由器变量 ( TypeScript/issues/5711#issuecomment-161194656 )。

以下代码将起作用(注意 let router: express.Router = express.Router())

import * as express from "express";

import * as adminRouter from "./admin/admin";
import * as productRouter from "./products/products";

let router: express.Router = express.Router();

router.use('/products', productRouter);
router.use('/admin', adminRouter);

// Export the router
export = router;

关于node.js - 导出变量 'router' 具有或正在使用来自外部模块的名称 'Router' 但无法命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41847314/

相关文章:

node.js - Windows 上的 node-gyp 出现问题 : configure error

ajax - 如何使用 Node 将 HTML POST 与 Mongodb 连接

angular - 使用 Angular rxjs 中的另一个可观察值转换来自一个可观察值的数据

typescript - 具有最后一个值的 Angular2 EventEmitter

typescript - 可以将 webpack 4 模块配置为允许 Jasmine 监视其成员吗?

node.js - npm run webpack -- -w 不看

node.js - req.headers.origin 未定义

node.js - Node 调试 : why can't I set a breakpoint?

node.js - 在 Jade View 中检查 session 变量

JavaScript/Express : TypeError: res. json 不是函数