我的打字稿代码中有一个枚举,其中列出了所有可能的用户角色:
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 配对。
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]));
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句