我有一个名为IUser
的接口,并在打字设置中使用strictNullChecks
。我想在类中使用IUser
变量,如下所示:
class UserAccount {
user: IUser;
}
上面的代码将生成错误:
Property 'user' has no initializer and is not definitely assigned in the constructor.
我可以修改:
class UserAccount {
user: IUser;
constructor() {
user = new User();
}
}
但从运行时的角度来看,user
只能在显示完成后一段时间后设置。从服务器获取user
的数据有延迟。user
的设置是通过一个RxJS
可观察对象来完成的,这个可观察对象只能响应性地工作。
我可以为user
做什么类型的初始化,以便它只能在以后设置。将user
设置为null
或undefined
可能不正确,因为我使用strictNullChecks
并显示对象将从一开始就存在的意图。但是,在服务器调用完成之前,user
的有效对象不可能存在。
*** UPDATE ****
这是一个比上面更好的例子:
export class AddPersonDialogComponent {
selectedPerson1: IPersonForTypeahead;
selectedPerson2: IPersonForTypeahead;
selectedPerson3: IPersonForTypeahead;
...
}
当用户从对话框中的三个下拉框中选择3个selectedPerson
对象时,它们被赋值。这三个属性一开始什么都没有,但是如果用户从对话框中的下拉菜单中选择people,它们就被设置了。
您可以将UserAccount
的使用设置为可观察对象,如下所示:
userAccount$: Observable<UserAccount> = this.service.getUser().pipe(
map(user => new UserAccount(user))
);
这里的想法是,在您拥有所需的所有数据之前,不要构造您的UserAccount
。这符合你的想法">但是在服务器调用完成之前,有效的user对象是不存在的".