typescript - 创建继承@Body() 或@Param() 装饰器的自定义NestJs 装饰器?

标签 typescript nestjs

我在使用 NestJs,在我使用的许多 Controller 中:

@Post(":id")
public create(
    @Param('id', new ParseIntPipe()) id: number, 
    @Body(new ValidationPipe({transform: true})) myData: MyClass) {
        // ... 
    }

我想通过创建自定义装饰器来清理我的代码,例如:

@Bind() => @Body(new ValidationPipe({transform: true}))

@Id() => @Param('id', new ParseIntPipe())

那么代码会比以前更干净:

@Post(":id")
public create(@Id() id: number, @Bind() myData: MyClass) {
    // ... 
}

像这样继承那些装饰器的正确方法是什么?

谢谢

最佳答案

因为装饰器只是简单的函数,你可以简单地创建一个函数来返回被调用的装饰器:

decorators.ts

import { Body, Param, ParseIntPipe, ValidationPipe } from '@nestjs/common';

export const Bind = () => Body(
  new ValidationPipe({transform: true}),
);

export const Id = () => Param('id', new ParseIntPipe());

然后将它们用作装饰器:

import { Id, Bind } from './decorators';

// ... 

@Post(":id")
public create(@Id() id: number, @Bind() myData: MyClass) {
    // ... 
}

关于typescript - 创建继承@Body() 或@Param() 装饰器的自定义NestJs 装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56726907/

相关文章:

javascript - 如果文件存在于 asset 文件夹中,我们如何在 img 元素中设置 url

javascript - NestJS 排除不同用户角色字段的策略?

nestjs - 在nestjs中将请求数据传递给服务的正确方法是什么?

javascript - 如何在 Angular 中使用 Swiperjs CDN?

reactjs - 在 Typescript 中将 null 的所有实例转换为 undefined 的通用方法

typescript - takeUntil 带过滤器

testing - 试图用 Jest 测试我的嵌套 api,返回未定义

node.js - Nestjs如何同时使用http请求和Websocket

typescript - 如何在使用 `ts` 的 `d.ts` 文件中导入 `declare namespace` 模块?

reactjs - Ant设计多重选择不接受数组作为默认值