class Animal { kind: string } class Dog extends Animal { dog_type: string } function showDogType(dog: Dog) { console.log(dog.dog_type) } // 代入不可のコンパイルエラーになってほしい const someAnimalFunc: (animal: Animal) => void = showDogType // 実際はここでランタイムエラー someAnimalFunc(new Animal()) このコードがコンパイルエラーにならず, 実行時エラーになってしまうことについて. TL;DR 型システムの健全性 (型の矛盾が生じないこと) vs 利便性のトレードオフから, 現在の TypeScript は健全性を諦めている 関数型はパラメータについて biv