//// [genericSpecializations2.ts] class IFoo { foo(x: T): T { // no error on implementors because IFoo's T is different from foo's T return null; } } 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; } } //// [genericSpecializations2.js] var IFoo = (function () { function IFoo() { } IFoo.prototype.foo = function (x) { return null; }; return IFoo; })(); 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; })();