因此,我尝试根据对/api/auth/login
进行API调用时从服务器获得的用户类型来分配不同的操作数组。
@Effect()
login = this.actions$.pipe(
ofType(AuthActions.ActionTypes.TryLogin),
map((action: AuthActions.TryLogin) => {
return action.payload;
}),
switchMap(loginData => {
return this.httpClient.post<{
jwtToken: string;
usertype: string;
expiresIn: number;
userId: string;
}>(`${this.BACKEND_URL}/api/auth/login`, loginData);
}),
mergeMap(res => {
const actions = [
{
type: AuthActions.ActionTypes.Login
},
{
type: AuthActions.ActionTypes.SetToken,
payload: res.jwtToken
},
{
type: AuthActions.ActionTypes.SetTokenExpiry,
payload: res.expiresIn
}
];
if (res.usertype === 'Admin') {
this.router.navigate(['/admin-panel']);
return [...actions, {type: AdminActions.ActionTypes.SetId, payload: res.userId}];
} else {
this.router.navigate(['/client-panel']);
return [...actions, {type: UserActions.ActionTypes.SetId, payload: res.userId}];
}
})
);
但是我遇到了这个错误:
Argument of type '(res: { jwtToken: string; usertype: string; expiresIn: number; userId: string; }) => ({ type: Act...' is not assignable to parameter of type '(value: { jwtToken: string; usertype: string; expiresIn: number; userId: string; }, index: number...'.
Type '({ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload: string; } | { type: ...' is not assignable to type 'ObservableInput<{ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload: strin...'.
Type '({ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload: string; } | { type: ...' is not assignable to type 'ObservableInput<{ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload: strin...'.
Type '({ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload: string; } | { type: ...' is not assignable to type 'Iterable<{ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload: string; } | ...'.
Types of property '[Symbol.iterator]' are incompatible.
Type '() => IterableIterator<{ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload...' is not assignable to type '() => Iterator<{ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload: string...'.
Type 'IterableIterator<{ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload: stri...' is not assignable to type 'Iterator<{ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload: string; } | ...'.
Types of property 'next' are incompatible.
Type '{ (value?: any): IteratorResult<{ type: ActionTypes; payload?: undefined; } | { type: ActionTypes...' is not assignable to type '{ (value?: any): IteratorResult<{ type: ActionTypes; payload?: undefined; } | { type: ActionTypes...'. Two different types with this name exist, but they are unrelated.
Type 'IteratorResult<{ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload: string...' is not assignable to type 'IteratorResult<{ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload: string...'. Two different types with this name exist, but they are unrelated.
Type '{ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload: string; } | { type: A...' is not assignable to type '{ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload: string; } | { type: A...'. Two different types with this name exist, but they are unrelated.
Type '{ type: ActionTypes; payload: string; }' is not assignable to type '{ type: ActionTypes; payload?: undefined; } | { type: ActionTypes; payload: string; } | { type: A...'.
Type '{ type: ActionTypes; payload: string; }' is not assignable to type '{ type: ActionTypes; payload: string; }'. Two different types with this name exist, but they are unrelated.
Types of property 'type' are incompatible.
Type 'ActionTypes' is not assignable to type 'ActionTypes'. Two different types with this name exist, but they are unrelated.
如果我分开管理员登录名和用户登录名,它可以正常工作。但这意味着很多代码都是相同的。有人可以帮我吗?
答案 0 :(得分:1)
我认为唯一的输入方式是Action
:
if (res.usertype === 'Admin') {
this.router.navigate(['/admin-panel']);
return [...actions, {type: AdminActions.ActionTypes.SetId, payload: res.userId} as Action];
} else {
this.router.navigate(['/client-panel']);
return [...actions, {type: UserActions.ActionTypes.SetId, payload: res.userId} as Action];
}