==== tests/cases/compiler/interfaceAssignmentCompat.ts (4 errors) ==== module M { export enum Color { Green, Blue, Brown, } export interface IEye { color:number; } export interface IFrenchEye { coleur:number; } export function CompareEyes(a:IEye,b:IEye):number { return a.color-b.color; } export function CompareYeux(a:IFrenchEye,b:IFrenchEye):number { return a.coleur-b.coleur; } export function test() { var x:IEye[]= []; var result=""; x[0]={ color:Color.Brown }; x[1]={ color:Color.Blue }; x[2]={ color:Color.Green }; x=x.sort(CompareYeux); // parameter mismatch ~~~~~~~~~~~ !!! Argument of type '(a: IFrenchEye, b: IFrenchEye) => number' is not assignable to parameter of type '(a: IEye, b: IEye) => number'. // type of z inferred from specialized array type var z=x.sort(CompareEyes); // ok for (var i=0,len=z.length;i=0;j--) { eeks[j]=z[j]; // nope: element assignment ~~~~~~~ !!! Type 'IEye' is not assignable to type 'IFrenchEye': !!! Property 'coleur' is missing in type 'IEye'. } eeks=z; // nope: array assignment ~~~~ !!! Type 'IEye[]' is not assignable to type 'IFrenchEye[]': !!! Type 'IEye' is not assignable to type 'IFrenchEye'. return result; } } M.test();