=== tests/cases/compiler/genericSpecializations1.ts === interface IFoo { >IFoo : Symbol(IFoo, Decl(genericSpecializations1.ts, 0, 0)) >T : Symbol(T, Decl(genericSpecializations1.ts, 0, 15)) foo(x: T): T; // no error on implementors because IFoo's T is different from foo's T >foo : Symbol(foo, Decl(genericSpecializations1.ts, 0, 19)) >T : Symbol(T, Decl(genericSpecializations1.ts, 1, 8)) >x : Symbol(x, Decl(genericSpecializations1.ts, 1, 11)) >T : Symbol(T, Decl(genericSpecializations1.ts, 1, 8)) >T : Symbol(T, Decl(genericSpecializations1.ts, 1, 8)) } class IntFooBad implements IFoo { >IntFooBad : Symbol(IntFooBad, Decl(genericSpecializations1.ts, 2, 1)) >IFoo : Symbol(IFoo, Decl(genericSpecializations1.ts, 0, 0)) foo(x: string): string { return null; } >foo : Symbol(foo, Decl(genericSpecializations1.ts, 4, 41)) >x : Symbol(x, Decl(genericSpecializations1.ts, 5, 8)) } class StringFoo2 implements IFoo { >StringFoo2 : Symbol(StringFoo2, Decl(genericSpecializations1.ts, 6, 1)) >IFoo : Symbol(IFoo, Decl(genericSpecializations1.ts, 0, 0)) foo(x: string): string { return null; } >foo : Symbol(foo, Decl(genericSpecializations1.ts, 8, 42)) >x : Symbol(x, Decl(genericSpecializations1.ts, 9, 8)) } class StringFoo3 implements IFoo { >StringFoo3 : Symbol(StringFoo3, Decl(genericSpecializations1.ts, 10, 1)) >IFoo : Symbol(IFoo, Decl(genericSpecializations1.ts, 0, 0)) foo(x: T): T { return null; } >foo : Symbol(foo, Decl(genericSpecializations1.ts, 12, 42)) >T : Symbol(T, Decl(genericSpecializations1.ts, 13, 8)) >x : Symbol(x, Decl(genericSpecializations1.ts, 13, 11)) >T : Symbol(T, Decl(genericSpecializations1.ts, 13, 8)) >T : Symbol(T, Decl(genericSpecializations1.ts, 13, 8)) }