gpt4 book ai didi

typescript - 如何在 TypeScript 中将数组类型隐式转换为元组类型?

转载 作者:行者123 更新时间:2023-12-03 16:19:19 26 4
gpt4 key购买 nike

现在,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);
Playground
编辑 :考虑到@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);

最佳答案

在这里定义每个休息的参数没有任何好处。

class Vector {
x: number;
y: number;

constructor(x?: number, y?: number) {
this.x = x ?? 0
this.y = y ?? x ?? 0
}
}

const args = [3, 5];

let vector = new Vector(...args);
这是有效的,因为为 args 推断的类型是 number[] .和元素 01number[]number | undefined匹配 Vector 的参数.
如果您指定 ...args: [] | [number] | [number, number] , 0 , 12允许参数。但是 number[]可以有 >=0元素。所以这违反了你的显式类型。

关于typescript - 如何在 TypeScript 中将数组类型隐式转换为元组类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66741052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com