首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >扩展参数必须具有元组类型或传递给rest parameter.ts(2556)。

扩展参数必须具有元组类型或传递给rest parameter.ts(2556)。
EN

Stack Overflow用户
提问于 2022-05-30 21:08:52
回答 1查看 525关注 0票数 2

嗨,我正试图为声明如下的add函数创建一个包装器:

代码语言:javascript
运行
复制
add(target: Object, propName:string, min?: number, max?: number, step?: number): GUIController;
add(target: Object, propName:string, status: boolean): GUIController;
add(target: Object, propName:string, items:string[]): GUIController;
add(target: Object, propName:string, items:number[]): GUIController;
add(target: Object, propName:string, items:Object): GUIController;

如果我对其中一个声明执行以下操作,它就会工作:

代码语言:javascript
运行
复制
add(...args: [Object, string, number?, number?, number?]) {
    return this.gui.add(...args);      <--- this works, but I want to do this for multiple signatures
}

所以我试着把不同的论点组合成一个。但我说A spread argument must either have a tuple type or be passed to a rest parameter.ts(2556)时出错了

代码语言:javascript
运行
复制
type AddArg = 
    [Object, string, number?, number?, number?] |
    [Object, string, boolean] |
    [Object, string, string[]] |
    [Object, string, number[]] |
    [Object, string, Object];

add(...args: AddArg) {
    return this.gui.add(...args);      <--- A spread argument must either have a tuple type or be passed to a rest parameter.ts(2556)
}

AddArg中的每个类型都是元组类型,但是类型记录没有看到这一点,我可以知道如何解决这个问题吗?

一个例子可以找到这里

EN

Stack Overflow用户

发布于 2022-05-30 22:15:19

当我评论时,我还没有见过您的操场,但是下面是一个arguments如何使用您拥有的类的例子:

代码语言:javascript
运行
复制
type AddArg = 
    [Object, string, number?, number?, number?] |
    [Object, string, boolean] |
    [Object, string, string[]] |
    [Object, string, number[]] |
    [Object, string, Object];

class SomeClass {
    add(..._args: AddArg[]) {
        return;
    }
}

export class MyClass {
    someClass: SomeClass
    constructor() {
        this.someClass = new SomeClass();
    }

    add(...args: AddArg) {
        return this.someClass.add(...arguments);      
    }
}

let a = new MyClass();

a.add({ foo: "bar"}, "baz", 3, 5, 1);
a.add({ foo: "bar"}, "baz", 3, 5);
a.add({ foo: "bar"}, "baz", 3);
a.add({ foo: "bar"}, "baz");
a.add({ foo: "bar"}, "baz", true);
a.add({ foo: "bar"}, "baz", ["blah, blah"]);
a.add({ foo: "bar"}, "baz", [1, 2, 3]);
a.add({ foo: "bar"}, "baz", { bar: "foo"});

// invalid
a.add({ foo: "bar"}, "baz", 3, "blah");

游乐场

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72440049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档