Cage 인터페이스에 animal속성은 readonly가 아니므로 수정가능한 상태다.
interface Cage<T> {
animal: T;
}
class Animal {
legs: number = 4;
}
class Dog extends Animal {
bark() {
console.log('bark! bark!')
}
}
class Cat extends Animal {
meow() {
console.log('meow! meow!')
}
}
let dogCage: Cage<Dog> = {animal: new Dog()};
let cage: Cage<Animal> = dogCage; // Covariant한 상황
cage.animal = new Cat();
dogCage.animal.bark(); // 에러 발생
interface Cage<T> {
readonly animal: T;
}