Varför tillåter TypeScript att en annan subklass passar in i en annan plats?


Givet :

class Base {}
class D1 extends Base{}
class D2 extends Base{}

const d1: D1 = new D1();

function printD2(d2: D2) {
    console.log(d2)
}
printD2(d1);

Jag skulle ha förväntat mig ett fel när d1 skickas in i printD2. De är strukturellt likadana, men de är härledda typer. Varför är detta? Hur kan man förhindra detta? Vid körning skulle d1 instanceof D2 returnera false.

https://www.typescriptlang.org/play?ts=4.6.4#code/MYGwhgzhAEBCkFNoG8C+AoUkYBECM0CAHgC4IB2AJjPBAmpuFNDgEyGkXVyIOYD25CCWiU8ALhYEAvNHIIA7lIAUASgDc6dADMAruWAkAloOgAHAE5HyJNssqtJbVSnTR30YIIj8QCAHQg-ADm9qyq6BiW1ras9ngaQA