const animal: Animal = { animal: "string", }; const dog: Dog = { animal: "string", dog: "string", }; いま,Dog <: Animalです. <:という記号は2つの型のあいだに書いて,「左の型が右の型のサブタイプである」と読みます. TypeScriptの型システムは構造的なので,2つのオブジェクトがサブタイプ関係にあるには,それらに共通するプロパティについてもまた,サブタイプ関係が必要1です. 今回の例では,DogとAnimalに共通するanimalプロパティについてstring <: stringなのでOKです. TSでは,S <: TならばT型の変数にS型の値を代入できます. つまり,Dog <: Animalなので Animal型の変数にDog型の値を代入できます.
![TypeScriptにおける配列の共変性](https://cdn-ak-scissors.b.st-hatena.com/image/square/191f4ae8db7b4b97895d30579cc4eae9e4f0d67d/height=288;version=1;width=512/https%3A%2F%2Fsititou70.github.io%2Fstatic%2F00f23a0da5a379c700a254af121e9b07%2F8dbcc%2Ftop.jpg)