class Foo { x:T; constructor(x:T) { this.x = x; } } function bar(foo:Foo,y:S):Foo { return new Foo(y); } var P = { bar: bar } declare var Q: { bar(foo:Foo,y:S):Foo; } var foo = new Foo(0); var x:string = foo.x; var z:Foo = Q.bar(foo,"");