簡體   English   中英

鍵入'字符串 | 號碼 | boolean' 不能分配給類型 'undefined'。 類型“字符串”不可分配給類型“未定義”.ts(2322)

[英]Type 'string | number | boolean' is not assignable to type 'undefined'. Type 'string' is not assignable to type 'undefined'.ts(2322)

我正在嘗試創建一個部分 object,它只有滿足標准的完整 object 的某些字段。 但是,當我嘗試分配屬性時,我收到主題 typescript 錯誤消息。 我創建了一個測試模塊來說明概念/問題。 請注意,這只是為了說明問題。 這不是實際的代碼。

type FullObject = {
  id: number
  name: string
  active: boolean
}

type PartialObject = Partial<FullObject>

const myFullObj: FullObject = {
  id: 1,
  name: 'First Object',
  active: true,
}

const myPartialObj: PartialObject = {}

let k: keyof PartialObject

for (k in myFullObj) {
  if (myFullObj[k] !== undefined) myPartialObj[k] = myFullObj[k] // Error here
  if (k === 'name') myPartialObj[k] = myFullObj[k] // No error here
}

請注意,只有第一個“if”語句有錯誤。 經過一些研究和嘗試各種事情后,我通過將部分 object 初始化為完整的 object 然后刪除不符合標准的屬性來解決該問題。 由於這是解決問題的一種倒退方式,我更願意創建具有符合標准的屬性的部分 object。

我想出了以下解決方案。 它清楚地說明了我要做什么:如果源 object 屬性滿足條件,則將該屬性復制到部分目標 object 中。 在這個例子中,我使用“not undefined”作為標准。 在實際代碼中,標准更復雜。

type FullObject = {
  id: number
  name: string
  active: boolean
}

type PartialObject = Partial<FullObject>

const myFullObj: FullObject = {
  id: 1,
  name: 'First Object',
  active: true,
}

let myPartialObj: PartialObject = {}

let k: keyof PartialObject

for (k in myFullObj) {
  if (myFullObj[k] !== undefined) myPartialObj = { ...myPartialObj, ...Object.fromEntries([[k, myFullObj[k]]]) }
}
console.log(JSON.stringify(myPartialObj, null, '  '))

似乎必須有更好的方法來實現這一點。 但是,該示例說明了預期的目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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