reactjs - Hvordan endre objektets verdi i typescript?
Jeg har et array med objekter, og jeg prøver bare å endre objektverdien, men jeg får feilen "Type 'string | boolean' kan ikke tildeles til typen 'never'. Type 'string' kan ikke tildeles til typen '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);
Svar #1
Du må gjøre funksjonen generisk på nøkkelen fordi grensesnittet ditt har mer enn én type verdi:
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);
Svar #2
Typescript slutter seg til typen fra din array-deklarasjon av en tom array. For å fikse dette trenger du bare å deklarere arrayen din slik
const fields: Field[]= [];
Grunnen til at du får feilen 'cannot be assigned to never' er fordi TypeScript ikke vet om nøkkelen din er required eller andre nøkler som er av typen string.
For å fikse det kan du enten erklære typer i funksjonsparametrene dine som nevnt av @iz_
function handleChangeField<K extends keyof Field>(
index: number,
key: K,
value: Field[K]
) {
fields[index][key] = value;
}
eller du kunne også håndtere eksplisitt typetesting i funksjonen din -
function handleChangeField(
index: number,
key: keyof Field,
value: string | boolean
) {
if (key === "required") {
fields[index][key] = (value as boolean);
} else {
fields[index][key] = (value as string);
}
}
