现在,args
是元组类型的可变参数。如何使该构造函数也接受数组,并将其转换为元组类型,生成与构造函数中指定的类型相同的类型?
是否可以在构造时不进行手动断言,即:
const args = [3, 5];
let vector = new Vector(...args as [number, number]);
或者
const args: [number, number] = [3, 5];
let vector = new Vector(...args);
class Vector {
x: number;
y: number;
constructor(...args: [] | [number] | [number, number]) {
switch(args.length) {
case 0:
this.x = 0;
this.y = 0;
break;
case 1:
this.x = this.y = args[0];
break;
case 2:
this.x = args[0];
this.y = args[1];
break;
}
}
}
const args = [3, 5];
let vector = new Vector(...args);
编辑:鉴于@philipp-fritsche的回答,如果我添加这些重载呢?
class Vector {
x: number;
y: number;
constructor();
constructor(xy: number);
constructor(x: number, y: number);
constructor(arg1?: number, arg2?: number) {
if(arg1 === undefined) {
this.x = this.y = 0;
} else if (arg2 == undefined) {
this.x = this.y = arg1;
} else {
this.x = arg1;
this.y = arg2;
}
}
}
const args = [1, 2];
let vector = new Vector(...args);
const args = [3, 5] as const;
。 - kaya3Vector
类之外执行任何操作? - Murolemargs
的类型是number[]
,所以要编辑Vector
类以进行此类型检查的唯一方法是让您的构造函数接受number[]
。 - kaya3