gpt4 book ai didi

typescript - 使用 Typescript 的通用映射器

转载 作者:行者123 更新时间:2023-12-03 08:46:55 29 4
gpt4 key购买 nike

这里的用例是使用泛型将带有 json 结果的获取响应映射到更复杂的类中。

例如mapper<T,U>(U json)哪里T是预期的返回类型。和U是可选的 json 类。

U可以是一个数组,例如导致 T[]Array<T>正在规划中。

例如给定 User :

interface CustomAdressImplementation {
street: string;
streetNumber: string;
city: string;
zip: string;
}

interface User {
id: string;
birthDate: Date;
name: string;
address: CustomAdressImplementation;
}

示例 json UserJson :

[
{
"id": 1,
"birthdate": "2020-02-20T10:00:19.145Z"
"name": "Leanne Graham"
"address": {
"street": "Kulas Light",
"streetNo": "2b"
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
},
[... more users]
]

自定义映射的一种方法是创建映射器方法:

interface GeoJson {
lat: string;
lng: string;
}

interface AddressJson {
street: string;
streetNo: string;
suite: string;
city: string;
zipcode: string;
geo: GeoJson;
}

interface UserJson {
id: number;
birthdate: string;
name: string;
address: AddressJson;
}

export function mapAddress(json: AddressJson): CustomAdressImplementation {
return {
street: json.street,
streetNumber: json.streetNo,
city: json.city,
zip: json.zipcode,
};
}

export function mapUser(json: UserJson): User {
return {
id: json.id.toString(),
birthDate: new Date(json.birthdate),
name: json.name,
address: mapAddress(json.address),
};
}

export function mapUserList(json: UserJson[]): User[] {
if (json) return json.map(mapUser);
return [];
}

是否有更优雅的方法来创建规则集以使用泛型进行映射?或者手动自定义映射是复杂映射逻辑的 typescript 交易的方式。

在我的示例中,日期、字符串转换和映射到地址类似乎可以编写得更优雅,避免使用样板自定义映射器方法。

使用类转换器库不是一个可接受的解决方案,而是寻找使用泛型的纯 Typescript 实现。

最佳答案

AutoMapper TypeScript是一个按约定提供对象到对象映射的工具,它尽可能接近原始的 .NET AutoMapper。

示例here和问题描述很相似,也提供了解决方案。

关于typescript - 使用 Typescript 的通用映射器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61101095/

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