NestJS(节点)-通过通用类型验证请求

时间:2019-06-13 14:41:05

标签: node.js typescript validation oop nestjs

我有两个NestJS控制器

export class ParentController<T> {
    constructor(protected service: Service<T>) {}

    @Post()
    do(@Body() dto: ClassType<T>): Promise<T> {
        return this.service.do(dto);
    }
}

...和另一个控制器扩展了父级

@Controller('any')
export class AnyController extends ParentController<Entity> {
  constructor(protected service: Service) {
      super(service);
  }
}

如您所见,TypeORM实体通过泛型与此控制器绑定为T。在“ do(...)”方法中,我使用ClassType作为验证类型,但没有任何错误,根本不会触发验证。据我了解,它需要确切的类,而不是要定义为DTO的类型。

我的问题是:我如何仅使用我的Entity类型(不使用ParentController中的Entity本身)对方法“ do(...)”应用验证。我知道在JS运行时中不存在泛型,并且如果不具有此功能,很难制作抽象控制器。

P.S。我不需要使用 nestjsx / crud 组件

1 个答案:

答案 0 :(得分:0)

您不能那样做。 实际上,这就是我创建使用nestjsx/crud装饰器的@Crud()程序包的原因之一,您在其中传递了实体类型进行验证。

另一个选项-您可以创建一个mixin并在其中传递实体。