我有一个接口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