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
相关产品推荐
相关产品推荐

