我有一个接口正在扩展另一个接口。现在,我尝试将超接口类型的变量放入需要子接口类型参数的函数中。这是不可能的,因为超级接口类型变量缺少某些属性。
有点难以解释,因此我创建了一个带有Animal
接口的示例,该示例由Horse
接口扩展:
interface Animal {
age:number;
//... 100 other things
}
interface Horse extends Animal {
speed:number;
}
现在,我有了一个带有一个私有函数(rideHorse
)的模块,该函数仅接受一个Horse
as参数。还有一个公共函数(rideAnimal
),它接受所有,Animal
如下所示:
module AnimalModule {
function rideHorse(horse:Horse) {
alert(horse.speed);
}
export function rideAnimal(animal:Animal) {
animal.speed = 10; // Error: Animal cannot have speed
rideHorse(animal); // Error: 'animal' needs speed
}
}
// Calling the rideAnimal function
var myAnimal:Animal = {
age: 10
};
AnimalModule.rideAnimal(myAnimal);
如您所见,这是不起作用的,因为的animal
参数rideAnimal
没有speed
。所以我的问题是:如何将我animal
转换为aHorse
并speed
在rideAnimal
函数内部手动添加,以便错误消失?
您可以将自己Animal
变成Horse
这样。
function rideAnimal(animal:Animal) {
var horse = animal as Horse;
horse.speed = 10;
rideHorse(horse);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句