![](/img/trans.png)
[英]Type 'undefined' is not assignable to type 'number' .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.