Search code examples
javascriptarraystypescriptspread-syntax

Spread array into new array of another type


I've an array of Files (from an input file type) and want to concat them in another array with a different type, but with a File property.

The File array

const files:File[];

The final array type:

export type AttachmentModel = {
    ID?: number;
    Title?: string;
    ServerRelativeUrl?: string;
    File?: File;
}

const attachments:AttachmentModel[];

I've tried to use the spread syntax to merge them, but of course the types are different, so this doesn't work:

const merged = [...attachments, ...files]

If it was only a single object I would have done like this:

var testFile: File;
var testeAttachment: AttachmentModel = { ...{ ...testFile, File: testFile } };

How can I use "destructuring" in the files array so it returns an array of type AttachmentModel?


Solution

  • It looks like you want to end up with a array of AttachmentModel. If so, you'll want to map your File object to AttachmentModel objects:

    const merged: AttachmentModel[] = [
        ...attachments,
        ...files.map((file) => ({File: file}))
    ];
    

    Playground link