I need to map an Array<Quote>, where Quote is:
export interface Quote {
readonly chronoUnit: Quote.ChronoUnitEnum;
readonly downloadedDocs: number;
readonly downloadedKb: number;
readonly uploadedKb: number;
readonly uploadedRefs: number;
}
export namespace Quote {
export type ChronoUnitEnum = 'HOUR' | 'DAY' | 'MONTH' | 'YEAR';
export const ChronoUnitEnum = {
HOUR: 'HOUR' as ChronoUnitEnum,
DAY: 'DAY' as ChronoUnitEnum,
MONTH: 'MONTH' as ChronoUnitEnum,
YEAR: 'YEAR' as ChronoUnitEnum
};
}
To an Array<AlignedQuote>:
export interface AlignedQuote {
readonly alignedType: AlignedQuote.AlignedEnum;
readonly hour: number;
readonly day: number;
readonly month: number;
readonly year: number;
}
export namespace AlignedQuote {
export type AlignedEnum = 'DOWNLOADEDDOCS' | 'DOWNLOADEDKB' | 'UPLOADEDKB' | 'UPLOADEDREFS';
export const AlignedEnum = {
HOUR: 'DOWNLOADEDDOCS' as AlignedEnum,
DAY: 'DOWNLOADEDKB' as AlignedEnum,
MONTH: 'UPLOADEDKB' as AlignedEnum,
YEAR: 'UPLOADEDREFS' as AlignedEnum
};
}
I was thinking about using any kind of map, but I don't quite figure out how.
let quotes: Array<Quote>;
let alignedQuotes: Array<AlignedQuotes> = quotes.map(???).reduce(????);
Example:
quotes: [{
chronoUnit:ChronoUnit.HOUR,
downloadedDocs:1,
downloadedKb:23,
uploadedKb:65,
uploadedRefs:7
}];
alignedQuotes: [
{alignedType: AlignedQuote.AlignedEnum.DOWNLOADEDDOCS, hour: 1, day: null, month: null, year: null},
{alignedType: AlignedQuote.AlignedEnum.DOWNLOADEDKBS, hour: 23, day: null, month: null, year: null},
{alignedType: AlignedQuote.AlignedEnum.UPLOADEDKBS, hour: 65, day: null, month: null, year: null},
{alignedType: AlignedQuote.AlignedEnum.UPLOADEDREFS, hour: 7, day: null, month: null, year: null}
]
Any ideas?