小编Jes*_*end的帖子

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

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

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

class Test2 extends Test {
    constructor(...args) {
        super(...args); // TS2556
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

class Test2 extends Test {
    constructor(...args) {
        super(...args); // TS2556
    }
}
Run Code Online (Sandbox Code Playgroud)

super spread jsdoc typescript

3
推荐指数
1
解决办法
2823
查看次数

是否可以将泛型类型限制为仅允许已知属性?

如果向函数提供的对象具有太多属性,则会出现错误:

type Options = {
    str: "a" | "b",
}

function foo(a: Options) {
    return a.str;
}

const resultA = foo({
    str: "a",
    extraOption: "errors as expected",
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^------ Object literal may only specify known properties.
});
Run Code Online (Sandbox Code Playgroud)

这个不错,我想要这个 但因为我知道我将根据其输入返回什么类型,所以我想让该函数变得通用,如下所示:

function bar<T extends Options>(a: T) {
    return a.str as T["str"];
}
Run Code Online (Sandbox Code Playgroud)

但现在输入上允许使用额外的属性。

const resultB = bar({
    str: "a",
    extraOption: "no error!?",
});
Run Code Online (Sandbox Code Playgroud)

有什么办法可以限制这个吗?

游乐场链接

typescript

3
推荐指数
1
解决办法
522
查看次数

标签 统计

typescript ×2

jsdoc ×1

spread ×1

super ×1