interface EventTarget { x } class BaseEvent { target: EventTarget; } class MyEvent extends BaseEvent { target: T; } class BaseEventWrapper { t: BaseEvent; } class MyEventWrapper extends BaseEventWrapper { t: MyEvent; // any satisfies constraint and passes assignability check between 'target' properties }