导出变量"router"已从外部模块使用或正在使用名称"Router"但无法命名

Aid*_*des 2 module node.js express typescript

在使用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.
Run Code Online (Sandbox Code Playgroud)

basarat的答案为例

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;
Run Code Online (Sandbox Code Playgroud)

Aid*_*des 9

解决方案是显式地注释路由器变量(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;
Run Code Online (Sandbox Code Playgroud)