我有一個接口I基準和包含幾個其他對象的變量(樣品i中剛添加的鹼爲更好的示範)使用接口來輸入打字稿一個匿名對象
interface IBase {
height?:number;
width?:number;
}
var element = {
base: {
}
}
我怎樣才能說可變元素.base具有的對象來自IBase類型?我知道我可以爲包含base等類型的元素變量創建一個類型,但是也可以在不這樣做的情況下鍵入該場景。
我有一個接口I基準和包含幾個其他對象的變量(樣品i中剛添加的鹼爲更好的示範)使用接口來輸入打字稿一個匿名對象
interface IBase {
height?:number;
width?:number;
}
var element = {
base: {
}
}
我怎樣才能說可變元素.base具有的對象來自IBase類型?我知道我可以爲包含base等類型的元素變量創建一個類型,但是也可以在不這樣做的情況下鍵入該場景。
Van den Brink的答案很好。正如演示另一種選擇:
var element = {
base: <IBase> {
}
}
這將得到期望的智能感知,以及:
如果更改VAR元素的聲明下面就知道基地是:
var element: { base: IBase; } = {
base: {
}
}
注意:您也可以爲它創建這樣一個新的接口,這使得它多一點的可重複使用: 界面IElement基底:IBase; } 然後像這裏一樣使用它: var element:IElement = {base:{}}
您不小心造成自己與你的接口聲明的一個問題。這是一個微妙的,你會遇到結構類型的語言。
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
}
}
thx。這正是我正在尋找的:) – Safari