Подстановка ключа из переменной в объекте (TS7053)

Как подставить в объект ключ из переменной?

На сайте будет два селектбокса. В одном ключи, а в другом будут значения. Сначала выбираем ключ, потом значение, после чего отображаются все записи, подходящие под выбранные фильтры.

const users:{
    name:string;
    lastName:string;
    age:number;
    //[index: string]: string; этот вариант решения не подходит. Эта запись позволяет свободно использовать новые ключи в объекте, которые вообще не описаны. (как в JS)
}[]=[
    {
    name:'Саша',
    lastName:'Александров',
    age:22
},{
    name:'Мария',
    lastName:'Романова',
    age:32
},
];

let keyVariable:string='lastName';//значение будет браться из списка
let textValue:string='Романова';//Значение будет браться из 2-го списка

    for (let i = 0; i < users.length; i++) {
      if users[i][keyOfObj]===textValue{
        console.log(users[i][keyOfObj]);// тут и в условии if, ошибка TS7053: Element implicitly has an any type because expression of type string can't be used to index type
      }
    }

Ответы (1 шт):

Автор решения: Andrei Khotko

Предлагаю ввести тип User и использовать оператор keyof:

const users: User[] = [
  {
    name:'Саша',
    lastName:'Александров',
    age:22
  },
  {
    name:'Мария',
    lastName:'Романова',
    age:32
  },
];

type User = {
  name: string;
  lastName: string;
  age: number;
};

// Иммитация selectbox
type SelectBox = {
  value: string
};

const selectbox1: SelectBox = {
  value: 'lastName'
};
const selectbox2: SelectBox = {
  value: 'Романова'
};

let keyVariable = selectbox1.value as keyof User;
let textValue = selectbox2.value as User[keyof User];

for (let i = 0; i < users.length; i++) {
  if (users[i][keyVariable] === textValue){
    console.log(users[i][keyVariable]);
  }
}

→ Ссылка