Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change the object value in typescript?

I have an array of objects, and I am just trying to change the object value, but I am getting the error "Type 'string | boolean' is not assignable to type 'never'. Type 'string' is not assignable to type 'never'".

 interface Field {
 _id: string;
 name: string;
 title: string;
 required: boolean;
 }

 const fields: Field[] = [{ _id: "", name: "", title: "", required: 
 false }];

 function handleChangeField(
    index: number,
    key: string,
    value: string | boolean
  ) {
    fields[index][key as keyof Field] = value; //Error
  }


 handleChangeField(0, "required", true);
like image 497
Nikolay Khvan Avatar asked Nov 17 '25 09:11

Nikolay Khvan


1 Answers

You need to make the function generic on the key because your interface has more than one type of value:

interface Field {
    _id: string;
    name: string;
    title: string;
    required: boolean;
}

const fields: Field[] = [{ _id: "", name: "", title: "", required: false }];

function handleChangeField<K extends keyof Field>(
    index: number,
    key: K,
    value: Field[K]
) {
    fields[index][key] = value;
}


handleChangeField(0, "required", true);
like image 106
iz_ Avatar answered Nov 19 '25 03:11

iz_