Angular 为什么typescript在我的IDE中给了我一个错误,说在一个可观察对象上的属性不存在,但表明它们确实存在?
我目前正在尝试在我的授权服务文件中为我的帐户创建一个自动身份验证方法。三个月前我使用这种方法时,这些都不是问题。现在由于某种原因,我的IDE中出现了这些类型脚本错误,我想了解我做错了什么,以及我需要做些什么来修复它们。下面是我尝试使用的方法,后面是错误的图像和我编写的界面,我认为这可能是问题所在。如蒙协助,将不胜感激Angular 为什么typescript在我的IDE中给了我一个错误,说在一个可观察对象上的属性不存在,但表明它们确实存在?,angular,typescript,Angular,Typescript,我目前正在尝试在我的授权服务文件中为我的帐户创建一个自动身份验证方法。三个月前我使用这种方法时,这些都不是问题。现在由于某种原因,我的IDE中出现了这些类型脚本错误,我想了解我做错了什么,以及我需要做些什么来修复它们。下面是我尝试使用的方法,后面是错误的图像和我编写的界面,我认为这可能是问题所在。如蒙协助,将不胜感激 autoAuthenticateUser() { const AuthInformation = this.getAuthData(); if (!AuthInformation)
autoAuthenticateUser() {
const AuthInformation = this.getAuthData();
if (!AuthInformation) {
return;
}
const now = new Date();
const expiresIn = AuthInformation.expirationDate.getTime() - now.getTime();
//console.log(AuthInformation, expiresIn);
if (expiresIn > 0) {
this.token = AuthInformation.token;
this.isAuthenticated = true;
this.userId = AuthInformation.userId;
this.isAdmin = AuthInformation.isAdmin;
this.setAuthTimer(expiresIn / 1000);
this.authStatusListener.next(true);
}
}
这里还有与第一个相关联的另一个方法,即我的getAuthData方法
private getAuthData() {
const token = localStorage.getItem('token');
const expirationDate = localStorage.getItem('expiration');
const userId = localStorage.getItem('userId');
const isAdmin = localStorage.getItem('isAdmin');
if (!token || !expirationDate) {
return of(null);
}
return {
token: token,
expirationDate: new Date(expirationDate),
userId: userId,
isAdmin: isAdmin
}
}问题是
getAuthData
可以返回of(null)
。请注意,错误显示,属性'expirationDate'在类型Observable{expirationDate:Date…}
上不存在。这是一种联合类型
getAuthData
有两个return
分支,因此TypeScript将其解释为返回这两种类型的并集
这在一定程度上取决于您希望应用程序如何工作,但似乎您应该只返回
null
,而不是of(null)
。如果执行此操作,则可能会出现另一个错误,AuthInformation
可能为空。在这种情况下,您可以更新应用程序,使getAuthData
首先只能返回有效的auth,或者执行附加条件检查以查看AuthInformation
是否正确填充。问题在于getAuthData
可以返回of(null)
。请注意,错误显示,属性'expirationDate'在类型Observable{expirationDate:Date…}
上不存在。这是一种联合类型
getAuthData
有两个return
分支,因此TypeScript将其解释为返回这两种类型的并集
这在一定程度上取决于您希望应用程序如何工作,但似乎您应该只返回
null
,而不是of(null)
。如果执行此操作,则可能会出现另一个错误,AuthInformation
可能为空。在这种情况下,您可以更新应用程序,使getAuthData
首先只能返回有效的身份验证,或者执行附加条件检查以查看AuthInformation
是否正确填充。您可以向我们展示getAuthData
?是的,很抱歉,我也应该包括这一内容。我已经编辑了原始问题以包括getAuthData方法。您的命名约定没有什么问题,首先您的const AuthimInformation使用与接口相同的名称,并且以大写字母开头(与此问题无关,但很高兴知道),我将修复不相关的问题,谢谢。请以文本形式提供所有相关代码,而不是以文本图片形式提供。您能给我们看一下getAuthData
?是的,很抱歉,我也应该包括这些。我已经编辑了原始问题以包括getAuthData方法。您的命名约定没有什么问题,首先您的const AuthimInformation使用与接口相同的名称,并且以大写字母开头(与此问题无关,但很高兴知道),我将修复不相关的问题,谢谢。请以文本形式提供所有相关代码,而不是以文本图片形式提供。