我想转换数据获取的结果,以便组件可以使用它。
响应作为对象返回。
我需要投影对象的属性keywords
,它包含对象数组:
interface GetKeywordsResponse {
business : BusinessObj,
keywords : Array<KeywordObj>
}
keyword
interface KeywordObj {
id: number,
keyword: string
}
给我一个字符串数组:
//['foo', 'bar']
我知道我需要pipe()
和map()
才能实现。但是我的解决方案是生成类型错误。
服务方法:
public getKeywords(): Observable<Array<string>> {
return this.http.get<Observable<GetKeywordsResponse>>(...url).pipe(
map((res: GetKeywordsResponse): Array<KeywordObj> => res.keywords),
map((res: KeywordObj): Array<string> => res.keyword )
}
我希望该方法可以正常工作。但是我遇到两个错误:
1. Argument of type 'OperatorFunction<GetKeywordsResponse, KeywordObj[]>' is not assignable to parameter of type 'OperatorFunction<Observable<GetKeywordsResponse>, KeywordObj[]>'.
Type 'GetKeywordsResponse' is missing the following properties from type 'Observable<GetKeywordsResponse>': _isScalar, source, operator, lift, and 6 more.
2. Type 'string' is not assignable to type 'string[]'.
如何修复getKeywords()?
答案 0 :(得分:0)
public getKeywords(): Observable<string[]> {
return this.http.get(`${this.uri}/businesses/${this.businessId}/keywords`).pipe(
map((res: GetKeywordsResponse): Array<KeywordObj> => res.keywords),
map((arr: Array<KeywordObj>): string[] => arr.map((obj: KeywordObj): string => obj.keyword)))
}