2012-10-04 9 views
17

En su blog post sobre mecanografiado, Mark Rendle ya es decir, que una de las cosas que le gustan al respecto es:.¿Qué es "Typing estructural para interfaces" a máquina de escribir

"tipificación estructural para las interfaces Realmente deseo C# podría hacer eso "

¿Qué quiso decir con eso?

+0

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 –

Respuesta

18

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.

1

pensar.

class Employee { fire: = ..., otherMethod: = ...} 
class Missile { fire: = ..., yetMoreMethod: = ...} 
interface ICanFire { fire: = ...} 
val e = new Employee 
val m = new Missile 
ICanFire bigGuy = if(util.Random.nextBoolean) e else m 
bigGuy.fire 

¿Qué pasa si dijimos:

interface IButtonEvent { fire: = ...} 
interface IMouseButtonEvent { fire: = ...} 
... 

mecanografiado permitirá esto, C# no lo hará.

Como TypeScript tiene como objetivo trabajar bien con el DOM que usa tipeo "suelto", es la única opción sensata para escribir a máquina.

lo dejo al lector para decidir si les gusta “tipificación estructural” ... ..

Cuestiones relacionadas