2017-02-23 104 views
0

我有以下打字稿接口聲明嵌套的數據類型:打字稿如何從接口

interface IFoodShop { 
    name: string; 
    owner: string; 
    foods: Array<{ 
     id: number, 
     name: string, 
     isVegetarian: boolean 
    }> 
} 

我有需要paramater是相同的數據類型,從接口IFoodShop食物陣列的功能。我將如何聲明它,類似於這個,這不起作用。

// check if food is vegetarian 
isVegatarianFood(data: IFoodShop.foods) { 


} 

我明白我可以打破的數據類型,如下面:

interface IFoodShopFood { 
    id: number, 
    name: string, 
    isVegetarian: boolean 
} 

interface IFoodShop { 
    name: string; 
    owner: string; 
    openDate: Date; 
    foods: IFoodShopFood 
} 

// check if food is vegetarian 
isVegatarianFood(data: IFoodShopFood) { 


} 

但這對我來說似乎是不必要的,當我有很多陣列申報。我怎麼會簡單地說數據類型需要匹配嵌套的接口數據類型的食物?

+0

我認爲在第二個例子應該是'食物:IFoodShopFood []',否則就不是一個數組了。你什麼意思是不必要的?如果你想在多個地方使用類型,你必須定義它。你也可以定義一個結構明智的新類型,但這會造成很大的開銷。 –

回答

1

但是,當我有很多數組聲明時,這對我來說似乎是不必要的。

隨着打字稿夜間I recommend nightly),可以使用下面的語法:

interface IFoodShop { 
    name: string; 
    owner: string; 
    foods: Array<{ 
     id: number, 
     name: string, 
     isVegetarian: boolean 
    }> 
} 
// check if food is vegetarian 
function isVegatarianFood(data: IFoodShop['foods']) { } 

isVegatarianFood([{ id: 123, name: '123', isVegetarian: true }]); // okay 
isVegatarianFood([{ id: 123, name: '123', isVegetarian: 'ERRROR' }]); // ERROR