Type Guards
Son las maneras de controlar los tipos de datos\/objetos que se están utilizando, esto rompe con la programación orientada a objetos ya que esto representa un problema para el polimorfismo, por ejemplo: si estuvieramos haciendo una serie de comprobaciones para que según el tipo de clase u objeto se realize una acción u otra en el momento en el que existiera un objeto o clase que no tuvieramos contemplado tendriamos que modificar todo el código.
interface Bird {
fly();
layEggs();
}
interface Fish {
swim();
layEggs();
}
function getAnimal() : Fish | Bird {
var a : Fish;
return a;
}
function isFish(pet: Fish |Bird): pet is Fish {
return (<Fish>pet).swim != undefined;
}
let pet = getAnimal();
if(isFish(pet)) {
(<Fish>pet).swim();
console.log('glup');
} else {
console.log('believe i can fly');
pet.fly();
}