对象数组,并将函数添加为属性,并在打字稿中使用此属性访问其他属性

时间:2020-08-01 03:18:03

标签: javascript typescript

我有一个对象数组。我试图不对每个对象重复执行功能。

首先,我实现接口数组的方式是否正确?

第二,如何在每个对象上正确实现我的功能?我不确定在每个对象上分配该函数时是否必须进行调用或绑定。还是我完全做错了。

//interfaces
export interface IEmployee{
  id: number;
  name: string;
  hourly: number;
  hours_this_week: number;
  paycheck: (() => number);
}

// my function

const calculatePayThisWeek = (): number => {
    return this.hourly * this.hours_this_week;
}

export getEmployees = (): IEmployee[] => {
  return [
     { 
        id: 1,
        name: 'John Doe',
        hourly: 10,
        hours_this_week: 5,
        paycheck: calculatePayThisWeek
     },
     { 
        id: 2,
        name: 'Jane Doe',
        hourly: 15,
        hours_this_week: 8,
        paycheck: calculatePayThisWeek
     }
  ]
}

1 个答案:

答案 0 :(得分:0)

您需要calculatePayThisWeek才能成为function,而不是箭头函数。箭头函数捕获了封闭的this,这不是您想要的。

您不需要绑定任何东西。不过,您应该在this中注释calculatePayThisWeek

完整解决方案:

interface IEmployee {
  id: number;
  name: string;
  hourly: number;
  hours_this_week: number;
  paycheck: (() => number);
}

// my function
function calculatePayThisWeek(this: IEmployee): number {
    return this.hourly * this.hours_this_week;
}

const getEmployees = (): IEmployee[] => {
  return [
     { 
        id: 1,
        name: 'John Doe',
        hourly: 10,
        hours_this_week: 5,
        paycheck: calculatePayThisWeek
     },
     { 
        id: 2,
        name: 'Jane Doe',
        hourly: 15,
        hours_this_week: 8,
        paycheck: calculatePayThisWeek
     }
  ]
}