嗨,我正试图为声明如下的add
函数创建一个包装器:
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;
如果我对其中一个声明执行以下操作,它就会工作:
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)
时出错了
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
中的每个类型都是元组类型,但是类型记录没有看到这一点,我可以知道如何解决这个问题吗?
一个例子可以找到这里
发布于 2022-05-30 22:15:19
当我评论时,我还没有见过您的操场,但是下面是一个arguments
如何使用您拥有的类的例子:
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");
活游乐场
https://stackoverflow.com/questions/72440049
复制相似问题