繁体   English   中英

创建动态 javascript 类,将 d 扩展到 swagger 的 class

[英]Create dynamic javascript classes, to extend dto class for swagger

我正在尝试为 nestJS 中的 swagger dto 创建自己的“映射类型”

官方文档中有很多“映射类型”。 但是,我需要添加 class 的所有字段,并仅将其中一些字段设为可选。

为此,我做了这样的事情:

export default class CreateUserDto extends IntersectionType(
  OmitType(UserDto, ['nickname'] as const),
  PartialType(PickType(UserDto, ['nickname'] as const)),
) {} 

这完美地工作。 添加了所有字段,但只有昵称是可选的。

但是,重复使用不是很实用。 所以我想创建一个自定义 class以便能够扩展它并获得相同的结果。

我尝试以下方法:

const OptionalType = (dto, optional) => {
  return class NewClass extends IntersectionType(
    OmitType(dto, optional as const),
    PartialType(PickType(dto, optional as const)),
  ) {};
};

export default class CreateUserDto extends OptionalType(UserDto, [
  'nickname',
]) {}

并直接返回“IntersectionType”而不创建 class。

但这没有用。

当我尝试使用“可选”变量时,我收到错误消息... “‘const’断言只能应用于对枚举成员或字符串、数字、boolean、数组或 object 文字的引用。”

你能指导我如何实现我想要的吗?

您不需要将as const添加到OptionalType内的optional选项中,您只需要在调用OptionalType时将其添加到。

例如

const OptionalType = (dto, optional) => {
  return class NewClass extends IntersectionType(
    OmitType(dto, optional),
    PartialType(PickType(dto, optional)),
  ) {};
};

export default class CreateUserDto extends OptionalType(UserDto, [
  'nickname',
] as const) {}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM