首页 > 解决方案 > 接受泛型类型或相同泛型类型的数组

问题描述

我将反序列化来自 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);

编辑:这里是操场

标签: typescriptgenericsserialization

解决方案


推荐阅读