首页  编辑  

不使用DTO类返回少量字段对象[原创]

Tags: /Node & JS/   Date Created:
NestJS中,我们对返回的数据对象一般采用DTO类定义返回,但有的时候,我们要返回的数据较少,又不想使用DTO类定义,可以考虑使用下面的方法实现:
return 
{
  id: id,
  name: name,
  age: age
}

不添加属性而在Entity中添加临时字段返回数据,只要直接给类实例新变量赋值即可:
如有以下实体类:
class dto {
    id: number;
    value: string;
}

const a = new dto();
a.id = 0;
a.value = "1111";
a.name = "name"
console.log(a)
下划线处并没有在class中定义name,但我们可以直接赋值。而输出结果也是能看到有name:
[LOG]: dto: {
  "id": 0,
  "value": "1111",
  "name": "name"
}
当然,在TypeScript中,你也可以通过 & 符号(交叉类型(Intersection Types))来实现拼接两个类定义从而返回数据,例如:
type TempDto = dto & { [key: string]: object }
上面代码,额可以给原来的DTO增加一个数组对象! 示例代码:
const resultUserList = []
type TempUser = UsersEntity & { [key: string]: object }
for (let i = 0; i < entities.length; i++) {
    const user = entities[i]
    const tempUserData = user as TempUser;
    const query = new QueryDTO();
    query.status = 0;
    query.userId = user.id;

    const technologyList = await this.service.getUserList(query)
    tempUserData.list = technologyList
    resultUserList.push(tempUserData)
}