You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS中如何推断路由处理方法param decorator的返回类型

解决方案

TS 目前的类型系统规则中,参数装饰器无法自动透传返回类型到被装饰的参数上,因此有两种可行的处理方式:

  • 直接标注参数类型(最推荐,成本最低)
    你已经明确UserName装饰器返回string类型,直接给路由参数加上类型标注即可:
import { Controller, createParamDecorator, Get } from '@nestjs/common';

export const UserName = createParamDecorator((): string => 'Random User');

@Controller()
export class ProfileController {
  @Get('profile')
  getProfile(@UserName() user: string) {
    return user; // 此时user会被TS正确推断为string类型
  }
}
  • 如果你使用的是JavaScript项目没有TS环境,可以给参数添加JSDoc标注来获得类型提示:
import { Controller, createParamDecorator, Get } from '@nestjs/common';

export const UserName = createParamDecorator((): string => 'Random User');

@Controller()
export class ProfileController {
  @Get('profile')
  /**
   * @param {string} user
   */
  getProfile(@UserName() user) {
    return user; // 编辑器也会给出string类型的提示
  }
}

注意:如果你使用TS开发,必须确保文件后缀为.ts,且tsconfig.json中已开启strict相关的类型检查配置,否则类型推断不会生效。

内容的提问来源于stack exchange,提问作者Oscar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 19:48:04