效果:
getUserStatus$ = createEffect(() => this.actions$.pipe(
ofType(getUserStatus),
switchMap(_ => this.userApiService.getUserStatus().pipe(
map(userStatusApiResponse = > getUserStatusSuccess({
userStatusApiResponse
})),
catchError(error = > of(getUserStatusFailed({
error
})))))
));
服务:
public getUserStatus(): Observable<UserStatusApiResponse> {
return this.httpClient.get<CommonResponse<UserStatusApiResponse>> (`$ {
USER_STATUS_API
}`).pipe(
map(UserApiService.extractUserStatusApiResponse),
catchError(commonApiError)
);
}
提取GET响应的功能:
private static extractUserStatusApiResponse(response: CommonResponse<UserStatusApiResponse>): UserStatusApiResponse {
return response.data;
}
获取回复
{
"httpStatus": 200,
"data": {
"necessaryField1: "f1",
"necessaryField2: "f2",
"unecessaryField3: "f3",
"unecessaryField4: "f4",
"arrayUsers": [
{
"A": {
"a1": "aaa",
"a2": "bbb",
"a3": 0
},
"B": {
"b1": "aaa",
"b2": "bbb",
"b3": 0
},
"C": {
"c1": "aaa",
"c2": "bbb",
"c3": 0
}
}
]
}
}
我需要从上面对象下面的响应模型:
export interface UserStatusApiResponse {
"necessaryField1: string;
"necessaryField2: string;
"arrayUsers": ArrayUsers[]
}
arrayUsers
中,我只需要对象A
和B
:
export interface ArrayUsers {
a: A;
b: B;
}
减速器:
on(getUserStatusSuccess, (state, action) = > ({
...state,
error: null,
necessaryArray: {
necessaryField1: action.userStatusApiResponse.necessaryField1,
necessaryField2: action.userStatusApiResponse.necessaryField2,
},
arrayUsers: action.userStatusApiResponse.arrayUsers
})),
我的问题:
[总是在商店中,无论UserStatusApiResponse
,我都有所有网络响应。不在UserStatusApiResponse
中的另一个字段会自动扩展存储。
如何正确处理上述问题?我想控制每个对象/数组的类型,但总是在商店中看到所有对象。同样使用unecessaryField3
:f3
,unecessaryField4
:f4
和对象C
...
请记住,键入仅用于编译。它是用JS编译的,然后您没有任何类型。
因此,如果您只需要特定的字段,则需要映射响应到仅具有所需键的新对象。