我有以下Widget
类型:
enum WidgetType {
Page = "Page",
Tab = "Tab",
Value = "Value",
Chart = "Chart"
}
type PageWidget = {
type: WidgetType.Page;
children: Widget[];
};
type TabWidget = {
type: WidgetType.Tab;
children: Widget[];
};
type ValueWidget = {
type: WidgetType.Value;
};
type ChartWidget = {
type: WidgetType.Chart;
};
type Widget = PageWidget | TabWidget | ValueWidget | ChartWidget;
基于此我想要创建新类型调用WidgetWithChildren
,它必须是具有children
属性的小部件的联合(在这种情况下是PageWidget
和{{的并集1}}),但我想让它变得动态,所以当有一个带有孩子的新型Widget时,它会自动显示在TabWidget
。
我想要类似的东西:
WidgetWithChildren
TypeScript有可能吗?我怎么能这样做?
答案 0 :(得分:1)
如果您认为只依赖于您的需求,您应该能够使用界面满足您的需求。
interface HierarchicalWidget {
children: Widget[];
}
// Example usage
function needsChildren(widget: HierarchicalWidget) {
for (const child of widget.children) {
console.log(child.type);
}
}
具有children
类型Widget[]
的任何对象都可以满足此接口,无论它是否显式实现它。这允许您的代码依赖于HierarchicalWidget
的概念,而无需了解具体实现,例如PageWidget
或TabWidget
。