Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度:将字符串数组映射到http get调用中的枚举值数组_Javascript_Angular_Typescript_Enums_Type Conversion - Fatal编程技术网

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

Javascript 角度:将字符串数组映射到http get调用中的枚举值数组,javascript,angular,typescript,enums,type-conversion,Javascript,Angular,Typescript,Enums,Type Conversion,我的typescript代码中有一个枚举,列出了所有可能的用户角色: enum UserRole { CONSULTANT, MANAGER, ... } 我有一个REST端点/users/id/roles,它返回表示特定用户角色的字符串数组: [ "CONSULTANT", "MANAGER", ... ] 现在我想在我的前端代码中映射这个数组。我是这样做的: import {Http} from '@angular/http'; impor

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

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()));
}
从'@angular/Http'导入{Http};
从“rxjs/Observable”导入{Observable};
从“类转换器”导入{plainToClass};
...
getUserRoles(id:string):可观察{
返回此.http.get(`/users/${id}/roles`)
.map(response=>plainToClass(UserRole,response.json());
}
但我得到:

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

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


注意:我正在使用Typescript 2.5.3。与Angular 5.0.5配合使用。

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

return this.http.get(`/users/${id}/roles`)
    .map(response => response.json().map(x => UserRole[x]));
}
return this.http.get(`/users/${id}/roles`)
    .map(response => (<string[]>response.json()).map(x => UserRole[x]));
}
如果出现Typescript错误,可能需要先转换
json
结果,如下所示:

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