如何根据对象的键推断值类型并确保新值类型匹配?
如何根据对象的键推断对应值的类型?
你的原函数中,newValue的类型被推断为对象所有值类型的联合类型(number | string | boolean),所以即使传入与选中键不匹配的值也不会触发类型错误。要解决这个问题,需要通过额外的泛型参数来追踪具体的键,从而精准绑定对应的值类型。
修改后的函数实现
export const updateValueByKey = <I, K extends keyof I>( obj: I, keyToUpdate: K, newValue: I[K] // 现在会精准推断K对应的具体值类型 ) => { obj[keyToUpdate] = newValue; };
泛型参数说明
I:代表传入的对象类型K extends keyof I:约束K必须是I的键之一,TypeScript会根据传入的keyToUpdate自动推断出具体的K类型I[K]:通过索引类型查询,直接获取K键对应的具体值类型
验证效果
调用时传入不匹配的值会直接触发类型错误:
updateValueByKey( { id: 123, name: "Some Note", isPrivate: false, }, "id", "not a number" // 此处会报错:类型"string"不能赋值给类型"number" ); // 正确调用示例 updateValueByKey( { id: 123, name: "Some Note", isPrivate: false }, "name", "Updated Name" // 类型匹配,无错误 );
内容的提问来源于stack exchange,提问作者Alex Conrad
相关产品推荐
相关产品推荐

