【问题标题】:How to handle ExpressJS optional route parameters with TypeScript?如何使用 TypeScript 处理 ExpressJS 可选路由参数?
【发布时间】:2021-08-30 10:09:15
【问题描述】:

我有以下代码:

index.ts

import express from "express";
import { Uuid } from "./Uuid";
import { UuidGen } from "./Uuid_gen";

const app = express();
const port = process.env.port || 3000;

app.get("/Uuidgen/1/:operatingAgency/:locId?", (request, result) =>
    result.send(UuidGen.generateType1Uuid(request.params.operatingAgency, request.params.locId).toString())
);

app.listen(port, () => console.log(`UUID Generator listening on port ${port}`));

现在,当文件以 .ts 扩展名保存时,TypeScript 编译器会报错:

现在,当应用“快速修复”时,结果代码如下:

app.get("/Uuidgen/1/:operatingAgency/:locId?", (request, result) =>
    result.send(UuidGen.generateType1Uuid(request.params.operatingAgency, request.params["locId?"]).toString())

这编译得很好,但是locId 参数永远不会传递给回调函数并且是空的。我能做些什么?一个临时解决方案是将扩展名更改为.js 并确保tsconfig.json 中的"checkJs": false,但理想情况下,我希望我的整个项目都使用TypeScript。

我在package.json 中的devDependencies 下列出了@types/express

【问题讨论】:

  • 有一个open PR 可以解决这个问题。在合并之前,您可能希望使用查询字符串。
  • 说鬼,前两天还审核过了。谢谢;我尝试改用<string>req.query.locId,但这也不起作用。我错过了什么吗?

标签: node.js typescript express routes


【解决方案1】:

express 库具有Request 接口,其泛型类型为ParamsQueryBody。这适用于这种情况。例如:

import express, { Request } from 'express';

const app = express();
const port = process.env.port || 3000;

interface RequestParams {
    locId?: number;
    operatingAgency: string;
}

app.get('/Uuidgen/1/:operatingAgency/:locId?', (request: Request<RequestParams>, result) =>
  result.send(UuidGen.generateType1Uuid(request.params.operatingAgency, request.params.locId).toString()),
);

app.listen(port, () => console.log(`UUID Generator listening on port ${port}`));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 2023-03-05
    • 2018-07-07
    • 2017-03-29
    • 2019-05-04
    • 2016-02-05
    相关资源
    最近更新 更多