Typescript: Is there a simple way to convert an array of objects of one type to another

Shilpa Nagavara picture Shilpa Nagavara · Nov 30, 2016 · Viewed 52.5k times · Source

So, I have two classes

Item { name: string; desc: string; meta: string}

ViewItem { name: string; desc: string; hidden: boolean; }

I have an array of Item that needs to be converted into an array of ViewItem. Currently, I am looping through the array using for, instantiating ViewItem, assigning values to attributes and pushing it to the second array.

Is there a simple way to achieve this using lambda expressions? (similar to C#) Or is there any other means?

Answer

Nitzan Tomer picture Nitzan Tomer · Nov 30, 2016

You haven't showed enough of your code, so I'm not sure how you instantiate your classes, but in any case you can use the array map function:

class Item {
    name: string;
    desc: string;
    meta: string
}

class ViewItem {
    name: string;
    desc: string;
    hidden: boolean;

    constructor(item: Item) {
        this.name = item.name;
        this.desc = item.desc;
        this.hidden = false;
    }
}

let arr1: Item[];
let arr2 = arr1.map(item => new ViewItem(item));

(code in playground)


Edit

This can be shorter with Object.assign:

constructor(item: Item) {
    Object.assign(this, item);
}