类型的BehaviorSubject

时间:2019-04-05 12:03:50

标签: angular rxjs

假设我有一个模型用户。

我要创建一个User类型的BehaviorSubject,如下所示:

 private userSource = new BehaviorSubject<User>({});

使用此语句,我得到以下错误:

  Argument of type '{}' is not assignable to parameter of type 'User'

谁能帮助我定义User类型的BehaviorSubject

6 个答案:

答案 0 :(得分:3)

new BehaviorSubject<User>({}),您为此传递了BehaviorSubject的初始值。原因{}没有类型检测,您得到错误。

您需要传递User类型。在{}中提供该类型的属性,例如

private userSource = new BehaviorSubject<User>({ /* properties */ });

如果您不需要初始值。您可以在重播次数设置为ReplaySubject的情况下使用1

new ReplaySubject<User>(1)

这将提供没有初始值的相同功能。

答案 1 :(得分:0)

您的User类型必须具有一些属性。因此,不能将空的{}对象分配为User

的实例。

例如下面的User定义与{}不同:

interface User {
  name: string;
  address: string;
}

将以上内容更改为条件属性?将允许将空对象{​​{1}}分配为{}

示例:

user

答案 2 :(得分:0)

这是因为{}是一个与User具有不同属性的对象(实际上是一个空对象)。

您可以通过将{}强制转换为any来传递此信息:

new BehaviorSubject<User>({} as any);

答案 3 :(得分:0)

您需要传递User类型。 {}是一个初始值,不遵循User的架构/类型。
万一您想使用null以外的{}传递空值

答案 4 :(得分:0)

根据定义,BehaviorSubject需要一个初始值:

  

需要初始值并将其当前值发送给新订阅者的主题

给定的初始值(在您的情况下为{})与您的User类型不兼容,该类型可能包含一些必填字段。

因此,请创建一个用户:

const user: User = [...];
private userSource = new BehaviorSubject<User>(user);

如果没有初始值,则可以选择ReplaySubject

答案 5 :(得分:0)

您需要提供值(满足“用户”模型类型),而不是“ {}”

例如如果您的用户模型是这样的:

export interface User {
    name: string;
    id: string;
}

然后您的行为主题如下:

private userSource = new BehaviorSubject<User>({ 
     name: 'xyz',
     id: 'xyz'
});

您可以像这样将用户模型中的所有属性设为可选:

export interface User {
    name?: string;
    id?: string;
}