[英]How to change the object value in typescript?
我有一個對象數組,我只是想更改 object 值,但我收到錯誤消息“類型‘string | boolean’不可分配給類型‘never’。類型‘string’不可分配給類型’絕不'”。
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);
Typescript 是從空數組的數組 decleration 推斷類型。 要解決這個問題,你只需要像這樣聲明你的數組
const fields: Field[]= [];
你得到錯誤的原因不能分配給永遠是因為 typescript 不知道你的鍵是否是required
的或其他字符串類型的鍵。
要解決此問題,您可以按照@iz_ 所述在 function 參數中聲明類型
function handleChangeField<K extends keyof Field>(
index: number,
key: K,
value: Field[K]
) {
fields[index][key] = value;
}
或者您也可以在 function 中處理顯式類型檢查 -
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);
}
}
您需要使鍵上的 function 通用,因為您的接口具有不止一種類型的值:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.