Вопрос, полагаю, тривиальный, но, пролистав документацию, ответ не нашел. Нужно в интерфейсе или классе объявить свойство, которое должно быть унаследовано от базового. В некоторых языках это решается объявлением базового же типа. Например:
interface Foo { }
class A implements Foo { }
class B { }
interface Baz {
someField: Foo; // поле должно наследовать Foo
}
const b: Baz = {
someField: new B(); // ошибка
};
UPD более наглядный пример:
interface Foo { a: number; }
interface Bar extends Foo { b?: number; }
interface Baz extends Foo { c: number; }
class B implements Bar { /* interface release */ }
class C implements Baz { /* interface release */ }
interface X { instance: Bar; }
{ instance: new C() } as X;