typescript - 接受泛型类型或相同泛型类型的数组
问题描述
我将反序列化来自 REST 端点的 JSON 请求。该端点可以使用单个对象或一组相同对象的数组进行响应。
例如。单一客户
/api/customer/1
{ name: 'Matt', phone: '+010101010' }
例如。多个客户
/api/customer/
[
{name: 'Matt', phone: '+010101010'},
{name: 'John', phone: '+99999999'},
{name: 'Doe', phone: '+123131321'}
]
我想用这样的函数反序列化:
const mapper = <T>(type: DTOResponse<T>, data: any): T | T[] | null => {
let result: T | T[];
if (Array.isArray(data)) {
result = data.map(x => plainToClass(type, x));
}
else {
result = plainToClass(type, data);
}
return result;
}
const resAsArrayObj = mapper<DtoModel>(DtoModel, dtoArray);
const resAsSingleObj = mapper<DtoModel>(DtoModel, dtoSingleObj);
好的。该代码有效。但我更愿意知道返回的对象与我传递的泛型类型相同。
我想要这样的东西(参见第一个语句中的[])。
const resAsArrayObj = mapper<DtoModel[]>(DtoModel[], dtoArray);
const resAsSingleObj = mapper<DtoModel>(DtoModel, dtoSingleObj);
编辑:这里是操场
解决方案
推荐阅读
- python - Django:request.POST 中的值正确但无法保存表单
- java - 使用流按偶数日期过滤日期
- asp.net-mvc - 无法获取页面的属性
- html - 如何在我的项目中正确安装 ngx-recaptcha?
- ios - 使用 Newtonsoft.Json,在 iOS 上不反序列化文化不变量?
- javascript - 是否可以通过 javascript 通过读取 json 文件而不是使用参数来更新安全组?
- php - 在循环结果中修剪最后一个单词的问题
- unicode - UnicodeEncodeError:“ascii”编解码器无法在位置 3 编码字符“\u30db”:序数不在范围内(128)
- python - 如何在类上调用 write()?
- esp8266 - esp8266 固件更新后不启动