在Typescript中使用strictNullChecks时初始化对象



我有一个名为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设置为nullundefined可能不正确,因为我使用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对象是不存在的".

最新更新