TypeScript构造函数参数属性提升能否支持解构参数语法?
结论
TypeScript 目前原生不支持解构参数场景下的构造函数参数属性自动提升,你尝试的在解构属性前直接加访问修饰符的写法不符合TS语法规范,无法正常运行。
可用替代方案
方案1:配合 Object.assign 实现自动赋值
如果你的入参结构和类属性完全匹配,可以直接通过 Object.assign 批量赋值,不需要手动写每个属性的赋值语句:
class Option { private a: string; readonly b: number; constructor(opts: {a: string, b: number}) { Object.assign(this, opts); } }
注意:如果入参包含类中没有声明的额外属性,也会被赋值到实例上,若需要严格过滤可以先对入参做裁剪处理。
方案2:工具函数封装(适合多类复用场景)
如果多个类都需要类似的构造参数赋值逻辑,可以封装通用的赋值工具函数,同时做类型校验:
function assignProps<T extends object, U extends Partial<T>>(target: T, source: U) { Object.assign(target, source); } class Option { private a: string; readonly b: number; constructor(opts: {a: string, b: number}) { assignProps(this, opts); } }
补充说明
TS 官方目前没有支持解构参数属性提升的规划,核心原因是该语法会和原生 JavaScript 的解构语法产生冲突,不符合 TS 作为 JS 超集的设计原则。
内容的提问来源于stack exchange,提问作者Andikac
相关产品推荐
相关产品推荐

