TypeScript + Express:req.params

时间:2016-09-06 12:08:47

标签: node.js express typescript

我有以下快递路线:

app.get('/:id', function (req, res) {
  var idNum: number = Number(req.params.id);
  var idCast: number = +req.params.id;
  var id: number = req.params.id;

  console.log('typeof idNum ', typeof idNum , '  ', 'idNum== 0 :  ', idNum== 0  , '  ', 'idNum=== 0 :  ', idNum=== 0);
  console.log('typeof idCast', typeof idCast, '  ', 'idCast == 0 :', idCast == 0, '  ', 'idCast === 0 :', idCast === 0);
  console.log('typeof id    ', typeof id    , '  ', 'id == 0 :    ', id == 0    , '  ', 'id === 0 :'    , id === 0);

  res.json({});
});

返回:

typeof idNum  number    idNum== 0   : true    idNum=== 0   : true
typeof idCast number    idCast == 0 : true    idCast === 0 : true
typeof id     string    id == 0     : true    id === 0     : false

据我所知,typescript只提供编译时类型检查,我想这意味着它不知道req.params将参数作为字符串提供。

有什么方法可以自动将我的参数传给Number吗?或至少提出一个错误,我没有手动完成它?另外,似乎tympescript,除非在完整打字环境中使用,否则无用。

Endly,有没有"大"使用带有ExpressJS的TypeScript的开源项目,我可以从?

读取源代码

1 个答案:

答案 0 :(得分:1)

似乎req.params is any所以编译器无法知道id的值是字符串,但当然它是一个字符串,因为它是一个路径参数,它是总是字符串。

您应该可以使用router middleware来处理它,例如:

router.use(function (req, res, next) {
    if (req.params && req.params.id && typeof req.params.id === "string") {
        let num = Number(req.params.id);
        if (!isNaN(num) {
            req.params.id = Number(req.params.id);
        }
    }
    next();
});

那应该将所有名为id(它们都是字符串)的params转换为数字。