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

660
Views
Getting ts 7053 error (Typescript) with my Array of Objects that I created

I've seen other StackOverflow answers, but none of them seem to be working. Here is the error I am getting.

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Paycheck'.
  No index signature with a parameter of type 'string' was found on type 'Paycheck'.

I get this when I try to iterate over the Array, and using their keys to get their value. Is there anything wrong with the way I have created my types?

const seperated: Record<string, Array<string>> = {
    date: [],
    taxes: [],
    benefits: [],
    retirement: [],
    takeHome: [],
    total: [],
  };

type Paycheck = {
  date: string;
  taxes: number;
  benefits: number;
  retirement: number;
  takeHome: number;
  total: number;
};

// removing some code to go straight to forEach loop
// p is of type Paycheck
paychecks.forEach(p => {
    // seperated is pretty much the keys of paycheck
    Object.keys(seperated).forEach(key => {
      // p[key] is throwing the error I mentioned before
      seperated[key].push(p[key]);
    });
  });

What am I doing wrong? How do I add a index signature appropriately? I've looked at other solutions and can't get it to work.

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

0

What you can do is to get the key from Paycheck via keyof.

let k = key as keyof Paycheck;

And since all the properties (value) in seperated is with Array<string> type.

const seperated: Record<string, Array<string>> = {
  date: [],
  taxes: [],
  benefits: [],
  retirement: [],
  takeHome: [],
  total: [],
};

Hence, you need to cast the value from each property in Paycheck as string before the use of push.

seperated[k].push(p[k].toString());

Complete code

paychecks.forEach(p => { 
  Object.keys(seperated).forEach(key => {
    let k = key as keyof Paycheck;
    seperated[key].push(p[k].toString());
  });
});

Sample Demo on Typescript Playground


Unless you define the indexable key signature for the Type, then you can pass the key as string for index accessing for the Type:

type Paycheck = {
  date: string;
  taxes: number;
  benefits: number;
  retirement: number;
  takeHome: number;
  total: number;
  [key: string]: string | number; // Here to specify key as string and union Value type
};
seperated[key].push(p[key].toString());

Sample Demo (Define Indexable key Signature) on Typescript Playground

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!