我需要一张不同角度分量的图。这是地图:
private modals: MapOf<any> = {
addAttribute: AddAttributeModalComponent,
editAttribute: EditAttributeModalComponent,
requestUnit: RequestUnitModalComponent,
requestAttribute: RequestAttributeModalComponent
};
如您所见,我有一个通用类型MapOf。就是这样:
export interface MapOf<T> {
[key: string]: T;
}
现在我对
ComponentRef不适合此处,因为它仍然要求提供引用。 类型Component也不合适,因为我的组件已经过装饰,并且包含一些“纯”组件上不存在的方法。
有什么想法吗?
答案 0 :(得分:3)
装饰器不会更改类的类型。如果只想避免使用类型any
,请让每个组件类扩展相同的抽象类或实现相同的接口。然后,您可以将此新类型用作通用类型。例如,
class AddAttributeModalComponent implements MyInterface{...}
MapOf<MyInterface> = {...}
尝试的另一种选择是创建一个新的联合类型:
type MyNewType = AddAttributeModalComponent |
EditAttributeModalComponent |
RequestUnitModalComponent |
RequestAttributeModalComponent;
MapOf<MyNewType> = {...};
答案 1 :(得分:1)
简短的回答:没有这样的事情。
长答案::我们使用Component
装饰器定义@Component({...})
,以提供有关Component
的一些元数据。 Angular将使用该元数据来创建View
,这是我们以前知道的Component
的底层抽象。
因此,Component
装饰器下面的@Component
接口不是真正的“组件类”:
import {Component} from '@angular/core';
要实现您想要的目标,我认为EXISTS keyword click here是正确的。您可以创建一个接口或一个抽象类,然后从那里实现/扩展您的组件类。
如果您想了解更多有关该视图的信息,请参阅Ng Wizard撰写的有关该主题的一些不错的文章: Yakov Fain's answer https://blog.angularindepth.com/exploring-angular-dom-abstractions-80b3ebcfc02