Reputation:
Node7.4.0 / ES6 / Typescript 2.1.5 / WebStorm 2016.3
On the line : export default heroRoutes.router;
I get: TS2503 Cannot find namespace 'heroRoutes' after creating it and init() what could be wrong with it ?
thanks for feedback
HeroRouter.ts
import {Router, Request, Response, NextFunction} from 'express';
const Heroes = require('../data');
export class HeroRouter {
router: Router;
/**
* Initialize the HeroRouter
*/
constructor() {
this.router = Router();
this.init();
}
/**
* GET all Heroes.
*/
public getAll(req: Request, res: Response, next: NextFunction) {
res.send(Heroes);
}
/**
* GET one hero by id
*/
public getOne(req: Request, res: Response, next: NextFunction) {
let query = parseInt(req.params.id);
let hero = Heroes.find(hero => hero.id === query);
if (hero) {
res.status(200)
.send({
message: 'Success',
status: res.status,
hero
});
}
else {
res.status(404)
.send({
message: 'No hero found with the given id.',
status: res.status
});
}
}
/**
* Take each handler, and attach to one of the Express.Router's
* endpoints.
*/
init() {
this.router.get('/', this.getAll);
this.router.get('/:id', this.getOne);
}
}
// Create the HeroRouter, and export its configured Express.Router
let heroRoutes = new HeroRouter();
heroRoutes.init();
export default heroRoutes.router;
Upvotes: 3
Views: 4471
Reputation: 31823
const heroRouter = new HeroRouter();
const router = heroRouter.router;
export default router;
The reason for this is that you cannot export a qualified name.
The exports of a module are bound to a special object known as the module namespace object. One reason is that if qualified exports were legal, the semantics would be surprising as updating the value of the instance member router
of the variable heroRouter
would not update the value of the exported binding (here named default
).
Upvotes: 5