我有一个类似的界面:
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)
谢谢!
我的状态看起来像这样:
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)