簡體   English   中英

如何改變typescript中的object的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM