Después de cómo se crean y trabajan con las clases, el siguiente paso son las interfaces, otro concepto incluido en C# y Java que también es adquirido por TypeScript, y que nos facilitará la vida.
Qué son las interfaces
Para alquien que no ha estudiado informática, las interfaces pueden parecer que es un concepto un poco abstracto de “poca” utilidad. Con la práctica, uno se hace eco de su importancia, y del hecho de que sea otra de las fundamentales características de TypeScript respecto a Javascript, porque en Javascript no existen ni las clases, ni por tanto, las interfaces.
Las interfaces son un contrato (para el código). Se trata de requerir un nombre y parámetros a objetos, e incluso componer objetos nombrados ya existentes en otros nuevos. Al declarar una nueva clase respecto a una interfaz, ésta actúa como validadora de la clase de que todo se hace conforme a lo esperado (según la interfaz).
Se trata de un compromiso, que sirve para:
- Dar consistencia a las clases
- Clarificar las funciones y los parámetros, así como sus tipos (tanto de entrada como de salida)
- Crear funciones personalizadas y tipos de matrices
- Definir archivos de definición de tipos para librerias y frameworks
Consistencia en las clases
La consistencia en el diseño de clases es algo deseable cuando se trabaja en equipo, de forma que al definir una interfaz, todas aquellas clases que hagan uso de dicha interfaz deben ser iguales. Esto es muy bueno. De igual forma, al definir los tipos requeridos en las funciones, las posibilidades de error se reducen, tanto por los tipos devueltos como por los parámetros que requieren. De todo esto se encargan las interfaces, lo que hace que nuestro código sea más estricto a la hora de enfocar un proyecto web grande.
Archivos de definición de tipos para librerias y frameworks
Sobre los archivos de definición de tipos para librerias y framworks, lo mejor es navegar por definitelytyped.org. Básicamente, para trabajar con TypeScript con algunas librerías y frameworks es necesario incluir las definiciones de tipos que estan hechas ya (no tenemos que hacerlas, pero sí referenciarlas en nuestros proyectos). Y es en este sitio donde se guardan y se actualizan, por lo que si sigues trabajando con TypeScript, apunta este sitio entre tus favoritos!
Estas librerias en realidad son interfaces que hacen referencia a la librería Javascript original, pero para TypeScript es obligatorio su incorporación de definiciones. Son archivos con extensión .d.ts. te aseguro que tarde o temprano, alguna de estas interfaces la necesitarás (al menos, te anticipo que habrá una entrada futura de TypeScript utilizando jQuery).
El hecho de utilizar estas interfaces es aprovechado por los IDE para facilitar Intellisense, por ejemplo, en CATS sucede eso, al igual que en el resto de IDEs.
Las interfaces sí que son útiles en TypeScript
Aun estoy descubriendo este lenguaje, pero las interfaces sí las estoy utilizando en TypeScript porque el contrato de código es estricto, y esto favorece escribir grandes aplicaciones sin errores.
Al igual que con las clases, las interfaces también se pueden extender, lo que las hace todavía más interesantes. También pueden utilizarse los tipos creados tanto como valores devueltos como valores de parámetros, … todo sea por escribir bien grandes aplicaciones.
Si tienes que escribir largas apps, ve invirtiendo tiempo en conocer qué puedes hacer con las interfaces (aunque para el compilador de Javascript, éstas sean irrelevantes).
Escribiendo interfaces
Aunque las interfaces son muy utilizadas en C#, yo tengo que admitir que no las he usado mucho. No se si ahora en TypeScript las use más, que seguro que sí. El caso es que las interfaces pueden facilitar mucho la vida del desarrollador, pues conocer con claridad los tipos que requiere y que devuelven las funciones facilita mucho la vida, especialmente porque en Javascript no sucede así.
La realidad es que las interfaces sólo sirven en TypeScript a nivel de código, puesto que no tienen acción en la ejecución, es más, el compilador ignora las interfaces respecto a la transcripción de código Javascript, porque la compilación es siguiendo lo indicado en la/s clase/s.
</pre> <pre>interface IInterfaz{ name: string; desc: string; } class test implements IInterfaz{ name: string; desc: string; }</pre> <pre>
Otra característica que podemos aplicar a las interfaces es la herencia, de forma que podemos incluir extends también:
</pre> <pre>interface IInterfaz2 extends IInterfaz{ category: string; } class test_2 implements IInterfaz2{</pre> <pre> name: string; desc: string;</pre> <pre> category: string; }</pre> <pre>
Seguimos aprendiendo TypeScript!