массив объектов и добавление функции как свойства и доступ к другим свойствам с помощью этого в машинописном тексте - PullRequest
0 голосов
/ 01 августа 2020

У меня есть массив объектов. Я пытаюсь не повторять свои функции на каждом объекте.

Во-первых, правильно ли я реализовал свой массив интерфейса?

Во-вторых, как мне правильно реализовать свою функцию для каждого объекта ? Не был уверен, нужно ли мне выполнять вызов или связывать, когда я назначаю эту функцию каждому объекту. Или я совершенно не так делаю.

//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 голосов
/ 01 августа 2020

Вам нужно, чтобы 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
     }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...