属性 'subscribe' 在类型 'void | Observable<User>' 上不存在。 TS(2339)
Property 'subscribe' does not exist on type 'void | Observable<User>'. ts(2339)
login() {
this.auth.login(this.userName, this.password).subscribe((_: any) => {
this.router.navigateByUrl('app', {replaceUrl: true});
});
}
我不知道为什么会出现此错误,尝试了一些方法但没有任何效果。
这是我的 auth.login 方法 - 不知道错误可能出在哪里 - 我是 Angular:
的新手
login(username: string, password: string) {
let userObject: User;
if (username === 'user' && password === 'user1234') {
userObject = {
name: 'Max Mustermann',
userRole: 'USER',
};
}
else if (username === 'admin' && password === 'admin1234') {
userObject = {
name: 'Erika Mustermann',
userRole: 'ADMIN',
};
}else{
return this.assertNever();
}
return of(userObject).pipe(
tap(user => {
Storage.set({ key: TOKEN_KEY, value: JSON.stringify(user) });
this.currentUser.next(user);
})
);
}
在删除 assertNever() 方法时,最后出现此错误 return
:
Variable 'userObject' is used before being assigned. ts(2454)
你得到那个错误是因为你的 'login' 方法应该有一个没有“return”.
的路径
其他路径确实应该 returning 一个“Observable”,这听起来不错。
编辑:
现在我可以看到你的代码,错误似乎在这一行:
return this.assertNever();
可以使用“assertNever()”方法 return“void”/null/nothing???
无论如何,为了避免错误,你可以伪造一个虚拟用户并return它改变这一行:
else {
\return this.assertNever();
userObject = {
name: 'Fake',
userRole: 'NOLOGGED',
};
}
在您的函数中添加一些 return 类型将在将来帮助您。据我所见,你的函数 this.assertNever();
总是抛出但被声明(或推断)为 return void.
将其声明更改为 return never
并且 TS 将识别此函数不会 return。
void = returns,但不return一个值
never = 不会 return / return 值不会被观察到
login() {
this.auth.login(this.userName, this.password).subscribe((_: any) => {
this.router.navigateByUrl('app', {replaceUrl: true});
});
}
我不知道为什么会出现此错误,尝试了一些方法但没有任何效果。
这是我的 auth.login 方法 - 不知道错误可能出在哪里 - 我是 Angular:
的新手login(username: string, password: string) {
let userObject: User;
if (username === 'user' && password === 'user1234') {
userObject = {
name: 'Max Mustermann',
userRole: 'USER',
};
}
else if (username === 'admin' && password === 'admin1234') {
userObject = {
name: 'Erika Mustermann',
userRole: 'ADMIN',
};
}else{
return this.assertNever();
}
return of(userObject).pipe(
tap(user => {
Storage.set({ key: TOKEN_KEY, value: JSON.stringify(user) });
this.currentUser.next(user);
})
);
}
在删除 assertNever() 方法时,最后出现此错误 return
:
Variable 'userObject' is used before being assigned. ts(2454)
你得到那个错误是因为你的 'login' 方法应该有一个没有“return”.
的路径其他路径确实应该 returning 一个“Observable”,这听起来不错。
编辑:
现在我可以看到你的代码,错误似乎在这一行:
return this.assertNever();
可以使用“assertNever()”方法 return“void”/null/nothing???
无论如何,为了避免错误,你可以伪造一个虚拟用户并return它改变这一行:
else {
\return this.assertNever();
userObject = {
name: 'Fake',
userRole: 'NOLOGGED',
};
}
在您的函数中添加一些 return 类型将在将来帮助您。据我所见,你的函数 this.assertNever();
总是抛出但被声明(或推断)为 return void.
将其声明更改为 return never
并且 TS 将识别此函数不会 return。
void = returns,但不return一个值
never = 不会 return / return 值不会被观察到