假设我有一个模型用户。
我想创建一个User类型的BehaviorSubject,如下所示:
private userSource = new BehaviorSubject<User>({});
有了这个声明,我收到以下错误:
Argument of type '{}' is not assignable to parameter of type 'User'
任何人都可以帮我定义一个User类型的BehaviorSubject
你需要通过User
类型。 {}
是一个初始值,它不遵循User
的架构/类型。
Incase,你想传递一个空值使用null
除了{}
new BehaviorSubject<User>({})
,你已经通过了BehaviorSubject
的初始值。因为{}
没有类型检测,你会收到错误。
你需要通过User
类型。在{}
中提供该类型的属性
private userSource = new BehaviorSubject<User>({ /* properties */ });
如果您不需要初始值。你可以使用ReplaySubject
和重播计数设置为1
new ReplaySubject<User>(1)
这将提供相同的功能而没有初始值。
你的User
类型有一些必须具有属性。因此,空{}
对象不能作为User
的实例分配
例如,下面的User
定义与{}
不同:
interface User {
name: string;
address: string;
}
将上述内容更改为条件属性?
将允许将空对象{}
指定为user
。
例:
interface User {
name?: string;
address?: string;
}
这是因为{}
是一个与User
不具有相同属性的对象(实际上它是一个空对象)。
您可以通过将{}
投射到any
来传递此信息:
new BehaviorSubject<User>({} as any);
根据定义,BehaviorSubject需要初始值:
需要初始值并向新订户发出其当前值的主题
给定的初始值(在您的情况下为{}
)与您的User
类型不兼容,后者可能包含一些必填字段。
所以创建一个用户:
const user: User = [...];
private userSource = new BehaviorSubject<User>(user);
如果您没有初始值,则可以选择ReplaySubject
您需要提供值(满足“用户”模型类型)而不是“{}”
例如如果您的用户模型是这样的:
export interface User {
name: string;
id: string;
}
然后你的行为主题将是:
private userSource = new BehaviorSubject<User>({
name: 'xyz',
id: 'xyz'
});
要么
您可以将User模型中的所有属性设置为可选,如下所示:
export interface User {
name?: string;
id?: string;
}