gpt4 book ai didi

swagger - NestJS 映射类型 - 嵌套对象

转载 作者:行者123 更新时间:2023-12-05 08:04:11 25 4
gpt4 key购买 nike

在 NestJS 中,我想将 PickType() 与一个具有嵌套类属性的类一起使用。

示例:

export class Product {
status: string;
payment: {
status: string;
type: string;
}
}

它应该生成如下 DTO 的 swagger 文档:

class PartialClass {
payment: {
status: string,
type: string
}
}

但是下面的实现不起作用:

class PartialClass {
@ApiProperty({
type: () => PickType(Videochat, ['payment']),
})
payment: Pick<Videochat['payment'], 'type' | 'status'>;
}

它返回一个空的支付类属性:

class PartialClass {
payment: {
}
}

所以我猜 PickType 无法处理嵌套类型。

我也试过:

type: () => PickType(PickType(Videochat, ['payment']), ['status', 'type'])

但它也不起作用。

最佳答案

你可以这样处理,假设我们有以下类:

type User = {
id: number,
name: string,
address: {
street: string,
zipcode: string,
geo: {
lat: string,
lng: string,
},
},
};

要选择具有地址的用户,您可以简单地执行 type UserWithOnlyAddress = Pick<User, 'address'>;

如果您必须选择只有地址街道的用户,您可以处理它:

type Pick2<T, K1 extends keyof T, K2 extends keyof T[K1]> = {
[P1 in K1]: {
[P2 in K2]: (T[K1])[P2];
};
};


type UserWithOnlyStreetAddress = Pick2<User, 'address', 'street'>;

并且在三个层次上采摘

type UserWithOnlyGeoLat = Pick3<User, 'address', 'geo', 'lat'>;

type User = {
id: number,
name: string,
address: {
street: string,
zipcode: string,
geo: {
lat: string,
lng: string,
},
},
};

type Pick3<T, K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]> = {
[P1 in K1]: {
[P2 in K2]: {
[P3 in K3]: ((T[K1])[K2])[P3];
};
};
};

关于swagger - NestJS 映射类型 - 嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69721384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com