【问题标题】:How do you handle express controller method parameters when using typescript?使用打字稿时如何处理快速控制器方法参数?
【发布时间】:2019-05-31 22:51:37
【问题描述】:

我正在使用 express 进行路由,并且不需要在我的控制器方法中使用 Request 对象。但是,我找不到一种简单的方法来强制排除 Request 参数。

第一个示例通过了打字稿验证。

  public async findAll(req: Request, res: Response) {
    // search the db for all transactions
    const transactions = await Transaction.find();

    res.status(200).send({ transactions, incoming: req.body });
  }

此示例编译为有效的 javascript,但未通过 typescript 验证,因为我收到错误 'req' is declared but its value is never read.

  public async findAll(req: Request, res: Response) {
    // search the db for all transactions
    const transactions = await Transaction.find();

    res.status(200).send({ transactions });
  }

理想情况下,我根本不想在我的方法参数中包含请求。如果没有复杂的解决方法,这可能吗?

【问题讨论】:

    标签: javascript node.js typescript express routing


    【解决方案1】:

    我刚刚找到了一个经过反复试验的解决方案。如果您能找到更优雅的解决方案,请发布。

    为避免 typescript 编译器错误消息,只需将函数参数设为空对象 ({})。

    问题中的代码现在看起来像

    public async findAll({}, res: Response) {
      // search the db for all transactions
      const transactions = await Transaction.find();
    
      res.status(200).send({ transactions });
    }  
    

    希望这对将来的某人有所帮助,因为我找不到现有的帖子。

    【讨论】:

    • 没有注意到这个帖子。这不是解决问题的好方法,而是一种有趣的方法。这不是空对象,而是解构语法。如果第一个 arg 不是对象,它会降低函数的效率,并且会失败,但在这种情况下是可以接受的。好处是不需要为不会使用的参数发明唯一名称。
    • @EstusFlask,您的解决方案要好得多。感谢您教我正确的做法。
    【解决方案2】:

    'req' is declared but its value is never read 错误可能是由 TypeScript noUnusedParameters 选项引起的。如果它干扰了开发过程,可以禁用它以支持类似的 TSLint 规则,该规则可以微调以导致警告而不是错误。

    未使用的参数通常会加下划线以避免检查。 TypeScript 就是这种情况:

    public async findAll(_req: Request, res: Response) {...}
    

    【讨论】:

    • 哇,我从来不知道你可以使用下划线绕过 lint 规则。正是我正在寻找的。另外,现在我知道要搜索什么,这就是我需要的:stackoverflow.com/questions/38835001/…
    猜你喜欢
    • 2017-02-22
    • 2020-01-27
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2016-10-26
    • 2021-01-04
    相关资源
    最近更新 更多