2016-04-03 2 views
0

У меня есть интерфейс, который выглядит как:Каким будет тип переменной для моей переменной скрипта?

interface IMenu { 
    name: string; 
    page: any; 
    quantity: number; 
    headerColor: string; 
    icon: string; 
    unitsList: IUnitInfo[]; 
    pageType: UnitPageType; 
} 

переменных, которую я хочу, чтобы назначить тип имеет такую ​​ценность, возложенные на него:

this._menus = [ 
    {  
     name: 'menu1', 
     page: page1, 
     quantity: 2, 
     headerColor: "red", 
     icon: "arrow", 
     unitsList: this._unitsList, 
     pageType: UnitPageType.All 
    }, 
    { 
     name: 'menu2', 
     page: page2, 
     quantity: 4, 
     headerColor: "orange", 
     icon: "phone", 
     unitsList: 0, 
     pageType: UnitPageType.None 
    } 
]; 

Прямо сейчас, если я сделаю это, это дает мне предупреждение:

private _menus: IMenu[]; 

Итак, что было бы подходящего типа?

Благодаря

+4

«это дает мне предупреждение» - какое предупреждение? Похоже, 'unitsList: 0' неверно, поскольку' 0' - это число, но 'unitsList' - это тип' IUnitInfo [] '. – Aaron

ответ

0

Он будет работать до тех пор, как каждый элемент вы добавляете в массив совместим с интерфейсом IMenu:

var menus: IMenu[] = [ 
    {  
     name: 'menu1', 
     page: page1, 
     quantity: 2, 
     headerColor: "red", 
     icon: "arrow", 
     unitsList: this._unitsList, 
     pageType: UnitPageType.All 
    }, 
    { 
     name: 'menu2', 
     page: page2, 
     quantity: 4, 
     headerColor: "orange", 
     icon: "phone", 
     unitsList: [], 
     pageType: UnitPageType.None 
    } 
]; 

На самом деле, именно поэтому это хорошая идея Вводить _menus член, так как он уже ловит возможно непреднамеренное ошибку в коде (ваше использование 0 где ожидается массив IUnitInfo.

Если это не ошибка, Вы можете сделать свой интерфейс в виду, что это приемлемо, используя тип накидной, как это:

unitsList: number | any[]; 

Любой из них будет решить проблему - так что вы можете решить, что действительно в вашем случае.

Смежные вопросы