I've looked at the source code from PrimeNG DataTable and I think you can use the exportCSV code for exporting a csv of your data.
The "trick" is to generate a string starting with data:text/csv;charset=utf-8 and make this downloadable by the user.
Something like the following code should work for you (maybe you need to modify it a bit so it fits to your data).
Most of the code is copied from PrimeNG except the download method. That method is copied from a SO answer.
import { Component } from '@angular/core';
@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.css']
})
export class AppComponent {
    title = 'app works!';
    csvSeparator = ';';
    value = [
        { name: 'A3', year: 2013, brand: 'Audi' },
        { name: 'Z3', year: 2015, brand: 'BMW' }
    ];
    columns = [
        { field: 'name', header: 'Name' },
        { field: 'year', header: 'Production data' },
        { field: 'brand', header: 'Brand' },
    ];
    constructor() {
        console.log(this.value);
        this.exportCSV('cars.csv'); // just for show casing --> later triggered by a click on a button
    }
    download(text, filename) {
        let element = document.createElement('a');
        element.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(text));
        element.setAttribute('download', filename);
        element.style.display = 'none';
        document.body.appendChild(element);
        element.click();
        document.body.removeChild(element);
    }
    exportCSV(filename) {
        let data = this.value, csv = '';
        // csv = "data:text/csv;charset=utf-8,";
        //headers
        for (let i = 0; i < this.columns.length; i++) {
            if (this.columns[i].field) {
                csv += this.columns[i].field;
                if (i < (this.columns.length - 1)) {
                    csv += this.csvSeparator;
                }
            }
        }
        //body        
        this.value.forEach((record, j) => {
            csv += '\n';
            for (let i = 0; i < this.columns.length; i++) {
                if (this.columns[i].field) {
                    console.log(record[this.columns[i].field]);
                    // resolveFieldData seems to check if field is nested e.g. data.something --> probably not needed
                    csv += record[this.columns[i].field]; //this.resolveFieldData(record, this.columns[i].field);
                    if (i < (this.columns.length - 1)) {
                        csv += this.csvSeparator;
                    }
                }
            }
        });
        // console.log(csv);
        // window.open(encodeURI(csv)); // doesn't display a filename!
        this.download(csv, filename);
    }
    // resolveFieldData(data: any, field: string): any {
    //     if(data && field) {
    //         if(field.indexOf('.') == -1) {
    //             return data[field];
    //         }
    //         else {
    //             let fields: string[] = field.split('.');
    //             let value = data;
    //             for(var i = 0, len = fields.length; i < len; ++i) {
    //                 value = value[fields[i]];
    //             }
    //             return value;
    //         }
    //     }
    //     else {
    //         return null;
    //     }
    // }
}