2016-11-09 9 views

Odpowiedz

0

skończyło się robi:

export interface MenuItem { 
    title: string; 
    icon: string; 
} 

export interface MenuItemComponent extends MenuItem{ 
    component: any; 
} 

export interface MenuItemClick extends MenuItem{ 
    click: any; 
} 

Następnie użyłem:

appMenuItems: Array<MenuItemComponent|MenuItemClick>; 

Ale był nadzieją, było sposób modelować go za pomocą jednego interfejsu.

5

Nie z jednego interfejsu, gdyż typy mają żadnej logiki warunkowej i nie może zależeć od siebie, ale można przez podział interfejsy:

export interface BaseMenuItem { 
    title: string; 
    icon: string; 
} 

export interface ComponentMenuItem extends BaseMenuItem { 
    component: any; 
} 

export interface ClickMenuItem extends BaseMenuItem { 
    click: any; 
} 

export type MenuItem = ComponentMenuItem | ClickMenuItem; 
+0

Interesujące. Nigdy wcześniej nie eksportowałem "typu". Oznacza to po prostu, że MenuItem może być jednym lub drugim? – Nix

+0

Podoba mi się to lepiej niż ten, który zrobiłem poniżej. Link, który pomógł mi zrozumieć "typ" http://stackoverflow.com/a/36783051/256793 – Nix

+0

Tak: TS ma operatorów "AND" i "OR" dla swoich typów. Jeśli robisz coś takiego, OR może być miłe, aby dać ci jedną zebraną nazwę po ogłoszeniu grupy poszczególnych typów. – ssube

Powiązane problemy