在不同的博客文章和官方ngnx /商店文档链接的示例中,我发现以下方法作为"标准"经营方式。我将发布与登录后将用户添加到商店相关的代码。
首先,我创建了一个Appstore接口,表示我们的应用程序处理的所有对象:
export interface AppStore {
user: Observable<User>;
};
这是用户模型:
export interface User {
id: number;
username: string;
email: string;
};
然后我为用户创建了一个reducer(其中有效负载包含用户ID,电子邮件和用户名)
export const user: ActionReducer<User> = (state: User, action: Action) => {
switch (action.type) {
case ADD_USER:
return action.payload;
default:
return state;
}
};
最后,我选择&#39;用户&#39;以这种方式来自商店的物品:
user : User;
constructor(private store: Store<AppStore>) {
this.user = <Observable<User>>this.store.select('user');
}
但是,如果我将reducer更改为以下代码,即使在我看来User界面应该避免这种情况发生,无意义属性也会进入最终对象。
export const user: ActionReducer<User> = (state: User, action: Action) => {
switch (action.type) {
case ADD_USER:
return Object.assign({},action.payload, meaninglessProperty = 'abcd');
default:
return state;
}
};
所以,我的问题是:AppStore界面是一种可视化/理解我们应用程序整体商店结构的方式,还是ngrx商店实际检查Appstore中的属性是否尊重他们自己的界面合约?
我问这个是因为我有更复杂的场景,其中检查接口会使代码更安全&#34;它会减少犯错误的风险。
答案 0 :(得分:1)
你的问题与ngrx并不真正相关,但是关于Object.assign
的关于Typecript类型系统的问题更多,遗憾的是不能覆盖你的情况 - 你也可以在github上查看这个帖子以获得额外的有关此问题的详细信息:https://github.com/Microsoft/TypeScript/issues/10532