Crear TypeScript Generics poco a poco se convertirá en algo muy común. El lenguaje cada día tiene mayor tracción y el uso de Genéricos en cualquier lenguage compilado es muy importante. Vamos a ver un ejemplo sencillo de como manejar clases genéricas utilizando Typescript. Para ello partiremos de dos clases muy sencillas Galleta y Golosina :
1
2
3
4
5
6
7
8
9
10
|
export class Galleta{ sabor:string; constructor(sabor:string) { this .sabor=sabor; } } |
1
2
3
4
5
6
7
8
9
10
11
|
export class Golosina { nombre:string; sabor:string; constructor(nombre:string,sabor:string) { this .nombre=nombre; this .sabor=sabor; } } |
Como podemos ver ambas clases son muy parecidas. Vamos a crear ahora un par de clases que se denominen BolsaGalleta y BolsaGolosina que nos permitan almacenar Galletas y Golosinas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import {Galleta} from "./Galleta" ; export class BolsaGalletas { lista:Array<Galleta>= new Array<Galleta>(); add(galleta:Galleta) { this .lista.push(galleta); } remove(galleta:Galleta) { var index = this .lista.indexOf(galleta, 0); if (index > -1) { this .lista.splice(index, 1); } } forEach(fn:(value: Galleta, index: number, array: Galleta[])=>void):void { this .lista.forEach(fn); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import {Golosina} from "./Golosina" ; export class BolsaGolosinas { lista:Array<Golosina>= new Array<Golosina>(); add(golosina:Golosina) { this .lista.push(golosina); } remove(golosina:Golosina) { var index = this .lista.indexOf(golosina, 0); if (index > -1) { this .lista.splice(index, 1); } } forEach(fn:(value: Golosina, index: number, array: Golosina[])=>void):void { this .lista.forEach(fn); } } |
Es más que evidente que las bolsas son muy parecidas y que únicamente cambia el tipo de la bolsa.
Vamos a ver el código del programa main que se encargaría de crear estas bolsas y añadir elementos a ellas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import {BolsaGolosinas} from "./BolsaGolosinas" ; import {BolsaGalletas} from "./BolsaGalletas" ; import {Golosina} from "./Golosina" ; import {Galleta} from "./Galleta" ; let bolsaGolosinas= new BolsaGolosinas(); let g1= new Golosina( "huesito" , "chocolate" ); let g2= new Golosina( "nube" , "fresa" ); bolsaGolosinas.add(g1); bolsaGolosinas.add(g2); bolsaGolosinas.forEach( function (elemento) { console.log(elemento); }); let bolsaGalletas= new BolsaGalletas(); let galleta1= new Galleta( "chocolate" ); let galleta2= new Galleta( "fresa" ); bolsaGalletas.add(galleta1); bolsaGalletas.add(galleta2); bolsaGalletas.forEach( function (elemento) { console.log(elemento); }); |
Ejecutamos con node:
TypeScript Generics
Es evidente que el código esta fuertemente compartido y es prácticamente idéntico Por lo tanto estamos ante un problema que puede ser solventado utilizando genéricos. Vamos a ver como definir una clase bolsa Genérica en TypeScript.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
export class Bolsa<T> { lista:Array<T>= new Array<T>(); add(elemento:T) { this .lista.push(elemento); } remove(elemento:T) { var index = this .lista.indexOf(elemento, 0); if (index > -1) { this .lista.splice(index, 1); } } forEach(fn:(value: T, index: number, array: T[])=>void):void { this .lista.forEach(fn); } } |
TypeScript Generics y Main
Es momento de utilizar esta clase genérica en nuestro programa Main para que veamos como utilizarla:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import {Bolsa} from "./Bolsa" ; import {Golosina} from "./Golosina" ; import {Galleta} from "./Galleta" ; let bolsa= new Bolsa<Golosina>(); let g1= new Golosina( "huesito" , "chocolate" ); let g2= new Golosina( "nube" , "fresa" ); bolsa.add(g1); bolsa.add(g2); bolsa.forEach( function (elemento) { console.log(elemento.nombre); console.log(elemento.sabor); }); let bolsa2= new Bolsa<Galleta>(); let galleta1= new Galleta( "chocolate" ); let galleta2= new Galleta( "fresa" ); bolsa2.add(galleta1); bolsa2.add(galleta2); bolsa.forEach( function (elemento) { console.log(elemento.sabor); }); |
El resultado será idéntico :
Acabamos de simplificar nuestro código utilizando TypeScript Generics .
Te esperamos en los siguientes artículos en donde hablaremos mas acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.