2016-04-03 64 views
0

我有一個看起來像一個接口:我的Typescript變量的變量類型是什麼?

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成員,因爲它已經趕上在代碼中可能無意的錯誤(您使用的0IUnitInfo陣列的預期。

如果這不是一個錯誤,你可以讓你的界面意識到,這是可以接受的,使用的聯合類型是這樣的:

unitsList: number | any[]; 

任何一項都將解決這個問題 - 這樣你就可以決定哪個是你的情況有效。