簡體   English   中英

如果裝飾了角度2組件,它們的類型是什么?

[英]What is the type of angular 2 components if they are decorated?

我需要一張不同角度分量的圖。 這是地圖:

  private modals: MapOf<any> = {
    addAttribute: AddAttributeModalComponent,
    editAttribute: EditAttributeModalComponent,
    requestUnit: RequestUnitModalComponent,
    requestAttribute: RequestAttributeModalComponent
  };

如您所見,我有一個通用類型MapOf。 就是這個:

export interface MapOf<T> {
  [key: string]: T;
}

現在,我對<any>感到困惑,因為顯然這是組件映射。 但是我不知道如何設置此類型,也找不到答案。

ComponentRef在這里不適合,因為它仍然要求引用。 類型Component也不合適,因為我的組件已經過裝飾,並且包含一些“純”組件上不存在的方法。

有任何想法嗎?

裝飾器不會更改類的類型。 如果只想避免使用any類型,則讓每個組件類擴展相同的抽象類或實現相同的接口。 然后,您可以將此新類型用作通用類型。 例如,

class AddAttributeModalComponent implements MyInterface{...}

MapOf<MyInterface> = {...}

嘗試的另一種選擇是創建一個新的聯合類型:

type MyNewType = AddAttributeModalComponent | 
                 EditAttributeModalComponent |
                 RequestUnitModalComponent |
                 RequestAttributeModalComponent;

MapOf<MyNewType> = {...};

簡短的回答:沒有這樣的事情。

長答案:我們通過使用@Component({...})裝飾器定義Component ,以提供有關Component一些元數據。 Angular將使用該元數據來創建View ,這是我們過去知道的Component的低級抽象。

因此, @Component Component裝飾器的以下Component接口不是真正的“組件類”:

import {Component} from '@angular/core';

為了實現您想要的目標,我認為Yakov Fain的答案是正確的。 您可以創建一個接口或一個抽象類,然后從那里實現/擴展您的組件類。

如果您想了解更多關於看來,是由吳向導有關此主題的一些不錯的文章: https://blog.angularindepth.com/exploring-angular-dom-abstractions-80b3ebcfc02 HTTPS://blog.angularindepth。 COM /一切任您需要到專門關於變更檢測功能於角8006c51d206f

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM