假设我有一个模型用户。
我要创建一个User类型的BehaviorSubject,如下所示:
private userSource = new BehaviorSubject<User>({});
使用此语句,我得到以下错误:
Argument of type '{}' is not assignable to parameter of type 'User'
谁能帮助我定义User类型的BehaviorSubject
答案 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;
}