angular 2 服务扩展:在函数中更改数据类型
angular 2 service extention: change datatype in function
在我的项目中,我创建了 list.service.ts,它包含列表的任何功能,从从 API 加载 json 个对象的列表,将 API 结果映射到行,分页等等...
对于每种列表类型(用户、项目...),我使用额外的数据、属性和功能扩展此服务。
export class UsersListService extends ListsService {...}
在扩展服务的所有更改中,API 结果格式(数据类型)更改。
我的 MapData 函数(一般)如下所示:
MapData(resultsData: any[], columns: NgListColumns[]): NgListDataRow[] {...}
用户列表服务中的函数如下所示:
MapData(resultsData: UserApiData[], columns: NgListColumns[]): NgListDataRow[] {...}
所以唯一的变化是 resultsData 的数据类型。
相同的更改将应用于其他几个功能。
我的问题:有什么方法可以将此数据类型作为主要服务中的参数并自动应用于扩展服务中吗?
现在我必须在服务扩展中重写所有这些函数,但这迫使我跟踪主服务中这些函数的任何更改,并修复所有扩展服务中这些函数的所有副本。
我认为您正在寻找 TypeScript 中泛型的概念。
在您的常规 ListsService
中尝试这样的事情
// T will be a type that the consuming "component" will specify when using this method
MapData<T>(resultsData: T[], columns: NgListColumns[]): NgListDataRow[] { ... }
然后要使用你的方法,你会这样做:
// the <...> here populates the type of the generic when we are consuming it
this.userListService.MapData<UserApiData>(x, y, z);
这样(我假设)您不必为了类型正确而重复方法。
了解有关泛型的更多信息here。
在我的项目中,我创建了 list.service.ts,它包含列表的任何功能,从从 API 加载 json 个对象的列表,将 API 结果映射到行,分页等等...
对于每种列表类型(用户、项目...),我使用额外的数据、属性和功能扩展此服务。
export class UsersListService extends ListsService {...}
在扩展服务的所有更改中,API 结果格式(数据类型)更改。
我的 MapData 函数(一般)如下所示:
MapData(resultsData: any[], columns: NgListColumns[]): NgListDataRow[] {...}
用户列表服务中的函数如下所示:
MapData(resultsData: UserApiData[], columns: NgListColumns[]): NgListDataRow[] {...}
所以唯一的变化是 resultsData 的数据类型。
相同的更改将应用于其他几个功能。
我的问题:有什么方法可以将此数据类型作为主要服务中的参数并自动应用于扩展服务中吗?
现在我必须在服务扩展中重写所有这些函数,但这迫使我跟踪主服务中这些函数的任何更改,并修复所有扩展服务中这些函数的所有副本。
我认为您正在寻找 TypeScript 中泛型的概念。
在您的常规 ListsService
// T will be a type that the consuming "component" will specify when using this method
MapData<T>(resultsData: T[], columns: NgListColumns[]): NgListDataRow[] { ... }
然后要使用你的方法,你会这样做:
// the <...> here populates the type of the generic when we are consuming it
this.userListService.MapData<UserApiData>(x, y, z);
这样(我假设)您不必为了类型正确而重复方法。
了解有关泛型的更多信息here。