NestJS的@Headers()装饰器与JavaScript原生Headers类冲突引发TypeScript错误
NestJS的@Headers()装饰器与JavaScript原生Headers类冲突引发TypeScript错误
看起来你遇到的问题确实是TypeScript把NestJS的@Headers()装饰器和浏览器/Node.js里的原生Headers类搞混啦!咱们来一步步解决这个问题:
问题根源
你当前的代码里没有从@nestjs/common包中导入Headers装饰器,TypeScript找不到你想用的NestJS装饰器,就自动去匹配全局环境里的原生Headers构造函数了。而原生Headers是需要用new关键字实例化的类,不是可以直接当装饰器调用的函数,这就导致了那句“Value of type '{ new (init?: HeadersInit): Headers; prototype: Headers; }' is not callable”的错误。
解决步骤
补充导入
Headers装饰器
把你顶部的导入语句修改一下,加上Headers:import { Body, Controller, Post, Headers } from '@nestjs/common';替换后的完整代码
修改后的控制器代码应该是这样的:import { Body, Controller, Post, Headers } from '@nestjs/common'; @Controller('users') export class UsersController { @Post() public createUser(@Body('email') email: string, @Headers() reqHeaders: any) { return 'You sent a request to create a user'; } }
额外优化建议
如果你想让类型检查更严谨,可以给reqHeaders指定更具体的类型,比如用Record<string, string | string[] | undefined>代替any,这样TypeScript能帮你提前发现一些潜在的类型问题:
public createUser(@Body('email') email: string, @Headers() reqHeaders: Record<string, string | string[] | undefined>) { // 业务逻辑 }
备注:内容来源于stack exchange,提问作者Ali Baghban
相关产品推荐
相关产品推荐

