2014-06-17 26 views
3

我有一個接口I基準和包含幾個其他對象的變量(樣品i中剛添加的鹼爲更好的示範)使用接口來輸入打字稿一個匿名對象

interface IBase { 
    height?:number; 
    width?:number; 
} 

var element = { 
    base: { 

    } 
} 

我怎樣才能說可變元素.base具有的對象來自IBase類型?我知道我可以爲包含base等類型的元素變量創建一個類型,但是也可以在不這樣做的情況下鍵入該場景。

回答

10

Van den Brink的答案很好。正如演示另一種選擇:

var element = { 
    base: <IBase> { 

    } 
} 

這將得到期望的智能感知,以及:

enter image description here

+0

thx。這正是我正在尋找的:) – Safari

3

如果更改VAR元素的聲明下面就知道基地是:

var element: { base: IBase; } = { 
    base: { 
    } 
} 

注意:您也可以爲它創建這樣一個新的接口,這使得它多一點的可重複使用: 界面IElement基底:IBase; } 然後像這裏一樣使用它: var element:IElement = {base:{}}

4

您不小心造成自己與你的接口聲明的一個問題。這是一個微妙的,你會遇到結構類型的語言。

interface IBase { 
    height?:number; 
    width?:number; 
} 

因爲所有的屬性都是可選的,所以接口本質上是{}。即任何物體都滿足這個界面。這太籠統了,無法在大多數情況下使用。

例如,它是完全可以接受的做到這一點:

var x: IBase = { 
    a: 'efsdsdf', 
    v: 'sdfdsf' 
}; 

我想你會同意,真的這個對象不是我想用一個IBase對象有用的任何地方。

通過這種方式,您可能會發現最優雅的解決方案是創建一個與您的element定義相匹配的界面。

interface IElement { 
    base: { 
     height?:number; 
     width?:number; 
    } 
} 

var element: IElement = { 
    base: { 
     height: 4 
    } 
}