小编Kal*_*rov的帖子

Typescript-接口扩展带有嵌套属性的另一个接口

我有一个类似的界面:

export interface Module {
  name: string;
  data: any;
  structure: {
    icon: string;
    label: string;
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

如何扩展它,以便向结构添加一些新属性,而无需重复我自己?我是否必须为结构创建一个新的接口并对其进行扩展,并使用新的结构接口创建一个新的Module,还是有其他语法可以实现此目的?

理想情况下,我将只写以下内容:

export interface DataModule extends Module {
  structure: {
    visible: boolean;
  }
}

export interface UrlModule extends Module {
  structure: {
    url: string;
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

syntax typescript

7
推荐指数
1
解决办法
2001
查看次数

Ngrx-存储更改后选择器未发出新值

我的状态看起来像这样:

export interface State {
  modules: Module[];
}
Run Code Online (Sandbox Code Playgroud)

而Module接口类似于:

export interface Module {
  name: string;
  structure: {
    moduleID: string;
    icon: string;
    ...
  };
  data: [{id: string; value: string; }];
}
Run Code Online (Sandbox Code Playgroud)

模块中的数据已连接到输入字段和组合框。当用户在输入字段中更改某些内容时,化简器将调度动作,并使用给定数据对象的新数据值来更新存储。我已经验证了更改在商店中发生。

Reducer执行以下操作:( getModules()仅返回具有该名称的模块,而changeElementData()查找要更改的元素并对其执行data.value = value)

case fromTitelActions.SET_DATA: {
      const stateCopy = {...state};
      const moduleToChange = getModule(action.payload.nameOfModule, stateCopy.modules);
      action.payload.data.forEach(data => changeElementData(moduleToChange, data.Id, data.value));
      return stateCopy;
    }
Run Code Online (Sandbox Code Playgroud)

我正在尝试订阅特定的数据值并检测更改。我的选择器如下所示:

export const getDataElementValue = (moduleName, elementId) => createSelector(getModules,
     modules => {
        const module = modules.find(m => m.name === moduleName);
        const data = module.data.find( d …
Run Code Online (Sandbox Code Playgroud)

observable ngrx angular ngrx-store

5
推荐指数
1
解决办法
3561
查看次数

标签 统计

angular ×1

ngrx ×1

ngrx-store ×1

observable ×1

syntax ×1

typescript ×1