粗箭头功能和巢状装饰器?

时间:2019-06-25 19:28:32

标签: typescript nestjs

我正在尝试将胖箭头功能与控制器中的nestjs装饰器一起使用。

那么有可能做这样的事情:

@Controller()
export class AppController {
  @Get()
  findAll = (): string  => 'This is coming from a fat arrow !';
}

使用此代码打字稿告诉我:Unable to resolve signature of property decorator when called as an expression,所以它不起作用。

我更喜欢使用粗箭头功能代替此“传统”功能:

@Controller()
export class AppController {
  @Get()
  findAll(): string {
    return 'This is not comming from a fat arrow';
  }
}

这就是为什么我问这样的事情是否可能。

1 个答案:

答案 0 :(得分:1)

我会说答案是否定的,原因是arrow function与JavaScript中的function有所不同,即更改了词法thisargumentsThis answer详细介绍了function () {}myFunction = () => {}的不同之处。

此外,使用箭头函数将禁止大量使用类函数,因此,如果要注入服务的任何实例,则将无法使用它们。

@Injectable()
export class AppController {
  constructor (private readonly appService: AppService) {}

  @Get('/')
  hello(): string {
    return this.appService.sayHello();
  }
}

可以正常工作,并从appService.sayHello()函数返回字符串,但这

@Injectable()
export class AppController {
  constructor (private readonly appService: AppService) {}

  @Get('/')
  hello = (): string => {
    return this.appService.sayHello();
  }
}

不会从appService.sayHello()函数返回字符串,因为它不知道appService