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
相关产品推荐
相关产品推荐

