Подстановка ключа из переменной в объекте (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]);
}
}