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

如何为返回对象属性引用的TypeScript函数添加强类型约束?

问题修复方案

错误原因

你定义泛型时使用的K = keyof O是为泛型参数设置默认值,而非约束K的类型范围,TypeScript无法保证传入的prop一定是object的合法键,因此会抛出索引不合法的错误。

修复后的完整代码

export function getPropertyReference<O extends Record<PropertyKey, any>, K extends keyof O>(object: O, prop: K): O[K] {
    return {
        get value(): O[K] {
            return object[prop];
        },

        set value(to: O[K]) {
            object[prop] = to;
        }
    }.value;
}

改动说明

  • 把泛型参数的默认值声明替换为extends类型约束:
    • O extends Record<PropertyKey, any>约束第一个入参必须是合法的对象类型
    • K extends keyof O约束第二个入参必须是传入对象的合法键,从根源上保证索引操作的合法性
  • 同时将getter、setter的返回值类型从any替换为O[K],消除所有隐式any类型,实现完全的类型安全

效果验证

使用时TypeScript会自动推导返回值的对应类型,赋值不匹配类型时会提前报错:

const testObj = { name: "测试", age: 20 };
const nameRef = getPropertyReference(testObj, "name");
// nameRef自动推导为string类型
nameRef = "新名称"; // 正常赋值
nameRef = 123; // TS直接抛出类型错误提示
console.log(testObj.name); // 输出"新名称"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:45:01