将参数传递给超类时出现打字稿错误。 `扩展参数必须具有元组类型或传递给剩余参数 (TS2556)。`

问题描述 投票:0回答:1

以下出现错误 TS2556,如何修复?

class Test {
    constructor(x: number) {}
}

class Test2 extends Test {
    constructor(...args) {
        super(...args); // TS2556
    }
}

或者如果您使用 jsdoc 和 tsc 进行类型检查:

class Test {
    /**
     * @param {number} x
     */
    constructor(x) {}
}

class Test2 extends Test {
    constructor(...args) {
        super(...args);
    }
}
typescript super jsdoc spread-syntax
1个回答
12
投票

使用

ConstructorParameters<T>
,如果您正在调用函数,则只需使用
Parameters<T>
即可。

class Test {
    constructor(x: number) {}
}

class Test2 extends Test {
    constructor(...args: ConstructorParameters<typeof Test>) {
        super(...args);
    }
}

或者对于 jsdoc:

class Test {
    /**
     * @param {number} x
     */
    constructor(x) {}
}

class Test2 extends Test {
    /**
     * @param  {ConstructorParameters<typeof Test>} args
     */
    constructor(...args) {
        super(...args);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.