How to Declare Map or List Type in TypeScript
 
Maps and lists are the basic data structures used in every programming language for writing application logic. A map is used to quickly retrieve data items from a store, while a list is a data structure where data items are stored sequentially.
TypeScript on its own does not support Map or List types; however, it is very easy to create the required Types using the built-in types in TypeScript.
Declare Record and Map Type in TypeScript
TypeScript has introduced the Record type, which can support map types with key-value pairs and has generic types for supporting maps of different types.
More specifically, Record<K,V> denotes that an object accepts keys of only type K, and the values corresponding to the keys should be of type V.
key of Record<K,V> would yield K as the type, and Record<K,V>[K] is equivalent to V. The Record type is an alias for index signatures like { [ key : K] : V }.
const colorMap : Record<string, string> = {
    'ylw' : 'yellow',
    'blk' : 'black',
    'bl' : 'blue'
};
Thus using the generic types, we can have multiple types for the Map or Record type in TypeScript. After compilation and the following typed object becomes a simple object in JavaScript.
Apart from the typed object, native Javascript has the Map function, which can initialize a new Map instance. It has quite of supported functions associated with it.
The following code segment will demonstrate how the Map function can be used to initialize a new Map object.
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);
Output:
"key : ylw, value : yellow"
"key : blk, value : black"
["ylw", "blk"]
["yellow", "black"]
Apart from the functions shown, it also supports other functions like delete and clear. These are used for deleting a single entry from the Map or clearing all the entries from the Map, respectively,
Declare List Type in TypeScript
    
There is no built-in list type in TypeScript; however, TypeScript provides the Array type for storing contiguous data elements. It is easy to create a list data structure ADT using the Array type.
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());
Output:
"["first","second","default","default","default"]"
The above shows a basic example for constructing a list ADT; with some basic functions, it can easily be extended to support any list required in the application logic.
