class C { x: X; } function foo(c: C, x: X) { } type O = { f: number }; foo((new C: C), { f_: 0 }); class D extends C { bar() { this.x; } } foo(new D, { f_: 0 });