TypeScript接口向下转换

邓肯·卢克

我有一个接口正在扩展另一个接口。现在,我尝试将超接口类型的变量放入需要子接口类型参数的函数中。这是不可能的,因为超级接口类型变量缺少某些属性。

有点难以解释,因此我创建了一个带有Animal接口的示例,该示例Horse接口扩展

interface Animal {
    age:number;
    //... 100 other things
}

interface Horse extends Animal {
    speed:number;
}

现在,我有了一个带有一个私有函数(rideHorse的模块,该函数仅接受一个Horseas参数。还有一个公共函数(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转换为aHorsespeedrideAnimal函数内部手动添加,以便错误消失?

瓦莱里

您可以将自己Animal变成Horse这样。

function rideAnimal(animal:Animal) {
    var horse = animal as Horse;
    horse.speed = 10;
    rideHorse(horse);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章