TypeScript向super传展开参数报TS2556错误如何解决?
TS2556 报错解决方案(super传参触发场景)
错误原因
该报错的核心原因是:你在子类构造函数中展开传递的args没有明确的类型约束,TypeScript默认将其推导为any[]类型,而any[]既不是和父类构造函数入参匹配的固定长度元组,也不满足rest参数的类型要求,因此触发校验失败。
TypeScript 原生开发场景修复方案
推荐直接使用TS内置的ConstructorParameters工具类型提取父类构造函数的入参类型,无需手动重复声明参数:
class Test { constructor(x: number) {} } class Test2 extends Test { // 直接复用父类构造函数的参数类型元组 constructor(...args: ConstructorParameters<typeof Test>) { super(...args); // 报错消失 } }
如果需要手动声明类型,也可以直接定义和父类入参一致的元组类型:
constructor(...args: [number]) { super(...args); }
JSDoc 配合TSC类型检查场景修复方案
同样可以在JSDoc中使用ConstructorParameters类型约束参数:
class Test { /** * @param {number} x */ constructor(x) {} } class Test2 extends Test { /** * @param {ConstructorParameters<typeof Test>} args */ constructor(...args) { super(...args); // 报错消失 } }
内容的提问来源于stack exchange,提问作者Jespertheend
相关产品推荐
相关产品推荐

