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

TypeScript支持属性重载吗?需为不同类型属性加独立JSDoc

TypeScript中能否为属性重载并添加独立JSDoc?

TypeScript不支持直接重载接口属性,你遇到的“Duplicate identifier 'prop'”错误就是因为接口内不允许重复定义同名属性。不过要实现给不同类型的属性值添加独立注释的需求,有几种可行方案:

  • 使用联合类型+@typedef拆分注释
    先通过@typedef分别定义不同类型的属性场景,再用联合类型组合,IDE能识别不同类型对应的注释:

    /**
     * @typedef {string} ExamplePropString
     * @property {string} prop - 传入字符串时会触发"x"行为
     * @typedef {number} ExamplePropNumber
     * @property {number} prop - 传入数字时会执行"y"相关操作
     */
    interface Example {
      /** @type {ExamplePropString | ExamplePropNumber} */
      prop: string | number;
    }
    
  • 使用重载签名的setter/getter替代属性
    如果属性的赋值需要区分类型逻辑,可以改成重载的setter,这样能给不同类型的操作加独立注释:

    interface Example {
      /**
       * 获取当前属性值
       * @returns {string | number} 属性的当前值
       */
      get prop(): string | number;
      /**
       * 设置字符串类型的属性值
       * @param {string} value - 字符串参数,触发"x"行为
       */
      set prop(value: string);
      /**
       * 设置数字类型的属性值
       * @param {number} value - 数字参数,执行"y"相关操作
       */
      set prop(value: number);
    }
    
  • 使用联合接口拆分定义
    把不同类型的属性拆成独立接口,再通过联合类型合并,虽然IDE不会自动关联注释,但能明确不同场景的属性定义:

    interface ExampleStringProp {
      /** 传入字符串时会触发"x"行为 */
      prop: string;
    }
    interface ExampleNumberProp {
      /** 传入数字时会执行"y"相关操作 */
      prop: number;
    }
    type Example = ExampleStringProp | ExampleNumberProp;
    

总结:直接重载属性在TypeScript中不被允许,但通过上述几种方式,可以实现给不同类型的属性值添加独立JSDoc注释的需求。

内容的提问来源于stack exchange,提问作者Get Off My Lawn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:56:07