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

