You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中‘string | number’无法赋值给‘never’类型的问题求解

TypeScript遍历对象键值赋值时的类型报错解决方法

问题原因

这段代码报错是因为TypeScript的类型系统无法在forEach循环中推断出每个key对应的具体值类型——它仅知道props[key]是string | number的联合类型,但store[key]要求的是对应键的精确类型,两者不匹配就触发了never类型错误。

优化解决方案

方案1:用泛型函数封装赋值逻辑

把赋值操作抽成带泛型的函数,让TypeScript能精确跟踪单个键的类型,既优雅又保证类型安全:

function getObjectKeys<T extends object>(object: T) {
    return Object.keys(object) as (keyof T)[]
}

const props = {
    propA: 100,
    propB: 'text'
}

const store = { ...props }

// 泛型函数精准匹配键值类型
function assignProp<K extends keyof typeof props>(key: K) {
    store[key] = props[key]
}

getObjectKeys(props).forEach(assignProp)

方案2:循环内针对性类型断言

如果不想额外抽函数,直接在循环里给值做对应类型的断言,写法更简洁:

function getObjectKeys<T extends object>(object: T) {
    return Object.keys(object) as (keyof T)[]
}

const props = {
    propA: 100,
    propB: 'text'
}

const store = { ...props }

getObjectKeys(props).forEach((key) => {
    store[key] = props[key] as typeof store[typeof key]
})

方案3:直接用Object.assign(适合单纯属性同步)

如果你的需求只是把props的属性同步到store,完全可以跳过手动遍历,用Object.assign一步完成,类型会自动推导正确:

const props = {
    propA: 100,
    propB: 'text'
}

const store = { ...props }
Object.assign(store, props)

内容的提问来源于stack exchange,提问作者ceecee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:50:26