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

TypeScript中如何利用keyof获取属性类型,优化setParameter方法?

解决TypeScript中setParameter方法的类型提示问题

完全可以通过T extends keyof Settings来获取属性对应的类型,替换掉any,从而为用户提供准确的参数类型提示。只需要把data的类型指定为Settings[T]即可,这是TypeScript的索引访问类型特性,能根据属性名动态获取对应属性的类型。

修改后的完整代码如下:

class Settings {
    a: number = 0;
    b: string = "xyz";
}

class Manager { 
    settings: Settings = new Settings();
    constructor() {}
    update(){/* 重绘场景的逻辑实现 */}
    setParameter<T extends keyof Settings>(name: T, data: Settings[T]) {
        this.settings[name] = data;
        this.update();
    }
}

关键说明:

  • T extends keyof Settings:约束name参数只能是Settings类的合法属性名(即"a"或"b")
  • Settings[T]:利用索引访问类型,动态匹配当前name对应的属性类型。比如传入name="a"时,data必须是number类型;传入name="b"时,data必须是string类型
  • 修复了原代码中的两处疏漏:初始化settings属性,以及调用类成员时添加this关键字,避免运行时错误

修改后调用setParameter时,TypeScript会自动给出精准的类型提示,比如:

const manager = new Manager();
manager.setParameter("a", 123); // 合法,data为number类型
manager.setParameter("b", "abc"); // 合法,data为string类型
manager.setParameter("a", "abc"); // 报错,类型不匹配

内容的提问来源于stack exchange,提问作者Patrik Bašo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:57:04