Básicamente, significa que las interfaces se comparan en base a "mecanografiar el pato" más que en una identidad de tipo de letra.
Considere el siguiente código C#:
interface X1 { string Name { get; } }
interface X2 { string Name { get; } }
// ... later
X1 a = null;
X2 b = a; // Compile error! X1 and X2 are not compatible
Y el código mecanografiado equivalente:
interface X1 { name: string; }
interface X2 { name: string; }
var a: X1 = null;
var b: X2 = a; // OK: X1 and X2 have the same members, so they are compatible
La especificación no cubre esta con mucho detalle, pero las clases tienen "marcas" que significa la mismo código, escrito con clases en lugar de interfaces, sería tiene un error. Las interfaces C# tienen marcas y, por lo tanto, no se pueden convertir implícitamente.
La manera más simple de pensarlo es que si está intentando realizar una conversión de la interfaz X a la interfaz Y, si X tiene todos los miembros de Y, la conversión tiene éxito, aunque X e Y podrían no tener el mismo nombres.
he leído brevemente este http://stackoverflow.com/questions/2831175/does-c-sharp- have-an-equivalent-to-scalas-structural-typing que lo aclara un poco, pero aún me gustaría saber cómo se usa en TypeScript –