Angular:将字符串数组映射到http get调用中的枚举值数组

Posted

技术标签:

【中文标题】Angular:将字符串数组映射到http get调用中的枚举值数组【英文标题】:Angular: map string array to array of enum values in http get call 【发布时间】:2018-05-26 08:40:12 【问题描述】:

我的打字稿代码中有一个枚举,它列出了所有可能的用户角色:

enum UserRole 
    CONSULTANT,
    MANAGER,
    ...

我有一个 REST 端点 /users/id/roles,它返回代表特定用户角色的字符串数组:

[
    "CONSULTANT",
    "MANAGER",
    ...
]

现在我想在我的前端代码中映射这个数组。我是这样绑的:

import Http from '@angular/http';
import Observable from "rxjs/Observable";
import plainToClass from "class-transformer";
...

getUserRoles(id: string): Observable<UserRole[]> 
    return this.http.get(`/users/$id/roles`)
        .map(responce => plainToClass(UserRole, responce.json()));

但我明白了:

错误 TS2345:“typeof UserRole”类型的参数不可分配给“ClassType”类型的参数。 类型 'typeof UserRole' 与签名 'new (...args: any[]): UserRole[]' 不匹配。

问:有没有办法将字符串数组转换为枚举元素数组?

注意:我使用的是 Typescript 2.5.3。与 Angular 5.0.5 配对。

【问题讨论】:

【参考方案1】:

您可以在从服务器返回的数组上使用map,一旦您使用json 将其转换为对象,如下所示:

return this.http.get(`/users/$id/roles`)
    .map(response => response.json().map(x => UserRole[x]));

如果遇到 Typescript 错误,您可能需要先转换 json 结果,如下所示:

return this.http.get(`/users/$id/roles`)
    .map(response => (<string[]>response.json()).map(x => UserRole[x]));

【讨论】:

以上是关于Angular:将字符串数组映射到http get调用中的枚举值数组的主要内容,如果未能解决你的问题,请参考以下文章

Angular 循环 HTTP 请求将值映射到响应

Angular 4 - 将对象数组映射到模板中的 ngModel 驱动

Angular 2 observable 没有“映射”到模型

在 Angular 服务中 HTTP.get 之后从 firebase 返回的重复数组

将具有一对多关系的 .Net Core 实体映射到 Angular 2 接口

将 HttpClient 的响应映射到对象数组