Declarar tipo de mapa o lista en TypeScript

Shuvayan Ghosh Dastidar 21 junio 2023
  1. Declarar el tipo Registro y Mapa en TypeScript
  2. Declarar el tipo Lista en TypeScript
Declarar tipo de mapa o lista en TypeScript

Los mapas y las listas son las estructuras de datos básicas que se utilizan en todos los lenguajes de programación para escribir la lógica de la aplicación. Un mapa se utiliza para recuperar rápidamente elementos de datos de un almacén, mientras que una lista es una estructura de datos donde los elementos de datos se almacenan secuencialmente.

TypeScript por sí solo no es compatible con los tipos Map o List; sin embargo, es muy fácil crear los tipos requeridos utilizando los tipos integrados en TypeScript.

Declarar el tipo Registro y Mapa en TypeScript

TypeScript ha introducido el tipo Record, que puede admitir tipos de mapas con pares clave-valor y tiene tipos genéricos para admitir mapas de diferentes tipos.

Más específicamente, Record<K,V> indica que un objeto acepta claves de solo tipo K, y los valores correspondientes a las claves deben ser de tipo V.

key of Record<K,V> produciría K como tipo, y Record<K,V>[K] es equivalente a V. El tipo Record es un alias para firmas de índice como { [ tecla : K] : V }.

const colorMap : Record<string, string> = {
    'ylw' : 'yellow',
    'blk' : 'black',
    'bl' : 'blue'
};

Por lo tanto, al usar los tipos genéricos, podemos tener múltiples tipos para el tipo Mapa o Registro en TypeScript. Después de la compilación, el siguiente objeto escrito se convierte en un objeto simple en JavaScript.

Además del objeto escrito, Javascript nativo tiene la función Mapa, que puede inicializar una nueva instancia de Mapa. Tiene bastantes funciones compatibles asociadas con él.

El siguiente segmento de código demostrará cómo se puede usar la función Mapa para inicializar un nuevo objeto Mapa.

const colorMap = new Map<string, string>();
colorMap.set("ylw", "yellow");
colorMap.set("blk", "black");

colorMap.forEach( ( v, k , _) => {
    console.log( "key : " + k + ", value : " + v);
})

// keys
var keyList : string[] = [...colorMap.keys()];
console.log(keyList);
// values
var valueList : string[] = [...colorMap.values()];
console.log(valueList);

Producción :

"key : ylw, value : yellow"
"key : blk, value : black"
["ylw", "blk"]
["yellow", "black"]

Además de las funciones que se muestran, también admite otras funciones como “eliminar” y “borrar”. Estos se utilizan para eliminar una sola entrada del Mapa o borrar todas las entradas del Mapa, respectivamente.

Declarar el tipo Lista en TypeScript

No hay un tipo de lista incorporado en TypeScript; sin embargo, TypeScript proporciona el tipo Array para almacenar elementos de datos contiguos. Es fácil crear una estructura de datos de lista ADT utilizando el tipo Array.

class List<T> {
    private items : Array<T>;

    constructor(n? : number, defaultValue? : T){
        if ( n === undefined) {
            this.items = [];
        } else {
            if ( n && defaultValue){
                this.items = Array(n).fill(defaultValue);
            } else {
                this.items = Array(n);
            }
        }
    }

    push(item : T){
        this.items.push(item);
    }

    pop(item : T){
        return this.items.pop();
    }

    get(index : number) : T | undefined {
        return this.items[index];
    }

    set( index : number, item : T){
        this.items[index] = item;
    }

    getItems() : Array<T> {
        return this.items;
    }

}

List.prototype.toString = function listToString(){
    return JSON.stringify(this.getItems());
}

var list : List<string> = new List(5, "default");
list.set(1, "second");
list.set(0, "first");

console.log(list.toString());

Producción :

"["first","second","default","default","default"]"

Lo anterior muestra un ejemplo básico para construir una lista ADT; con algunas funciones básicas, se puede ampliar fácilmente para admitir cualquier lista requerida en la lógica de la aplicación.

Shuvayan Ghosh Dastidar avatar Shuvayan Ghosh Dastidar avatar

Shuvayan is a professional software developer with an avid interest in all kinds of technology and programming languages. He loves all kinds of problem solving and writing about his experiences.

LinkedIn Website

Artículo relacionado - TypeScript Map