//// [genericSpecializations1.ts] interface IFoo { foo(x: T): T; // no error on implementors because IFoo's T is different from foo's T } class IntFooBad implements IFoo { foo(x: string): string { return null; } } class StringFoo2 implements IFoo { foo(x: string): string { return null; } } class StringFoo3 implements IFoo { foo(x: T): T { return null; } } //// [genericSpecializations1.js] var IntFooBad = (function () { function IntFooBad() { } IntFooBad.prototype.foo = function (x) { return null; }; return IntFooBad; })(); var StringFoo2 = (function () { function StringFoo2() { } StringFoo2.prototype.foo = function (x) { return null; }; return StringFoo2; })(); var StringFoo3 = (function () { function StringFoo3() { } StringFoo3.prototype.foo = function (x) { return null; }; return StringFoo3; })();