Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

59
Views
Convert Object.entries reduce to Generics type

I have the following function in TypeScript, what it does is convert an enum to an array.

function toKeyValList(e: any) {
  return Object.entries(e).reduce((acc: any, val: any[]) => {
    acc.push({ key: val[0], value: val[1] });
    return acc;
  }, []);
}

enum IncidentRecordStatus {
  IN_PROCESS = 'IN_PROCESS',
  CLOSE = 'CLOSE',
}

const list = toKeyValList(IncidentRecordStatus);

[LOG]: [{
  "key": "IN_PROCESS",
  "value": "IN_PROCESS"
}, {
  "key": "CLOSE",
  "value": "CLOSE"
}] 


I would like to convert it to a generic function without using the "any" type

I tried this way, but I get an error

export function toKeyValList<T>(e: T): T {
  return (Object.entries(e) as Array<[keyof T, T[keyof T]]>).reduce((acc, [key, value]) => {
    acc.push({ key: key, value: value });
    return acc;
  }, e as T);
}

what would be the correct way to do it?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

I could not understand where that LOG variable is coming from, but here's the rest of it :

interface keyValuePair {
    key: string,
    value: string,
}

function toKeyValList<T extends object>(e: T) : keyValuePair[] {
  return Object.entries(e).reduce((acc, val : [string, string]) => {
    acc.push({ key: val[0], value: val[1] });
    return acc;
  }, [] as keyValuePair[]);
}

enum IncidentRecordStatus {
  IN_PROCESS = 'IN_PROCESS',
  CLOSE = 'CLOSE',
}

const list = toKeyValList(IncidentRecordStatus);

This would return :

[{
  "key": "IN_PROCESS",
  "value": "IN_PROCESS"
}, {
  "key": "CLOSE",
  "value": "CLOSE"
}] 
about 4 years ago · Juan Pablo Isaza Report

0

If you want to infer return type, try to avoid mutations in TypeScript. Consider this example:

const toKeyValList = <
  Obj extends Record<string, string>
>(obj: Obj) =>
  Object
    .entries(obj)
    .reduce<{ key: string, value: string }[]>(
      (acc, [key, value]) => [...acc, { key, value }],
      []
    );

enum IncidentRecordStatus {
  IN_PROCESS = 'IN_PROCESS',
  CLOSE = 'CLOSE',
}

// {
//     key: string;
//     value: string;
// }[]
const list = toKeyValList(IncidentRecordStatus);

Playground

See my article about TS mutations

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!