我有一个方法应该接受数字数组或接受可变数量的数字参数(可变)。在我使用的大多数语言中,当使方法/函数可变参数时,它都接受两种方法,但是在TypeScript中似乎不能。当我使该特定函数可变时,我提供number[]
的所有地方均编译失败。
供参考的签名(在类ObjectIdentifier
中):
constructor(... nodes : number[]) {
此操作失败:
return new ObjectIdentifier(numbers);
其中numbers
的类型为number[]
。
答案 0 :(得分:2)
这是一种方法:
class ObjectIdentifier {
public myNodes: number[];
constructor(first?: number | number[], ...rest: number[]) {
this.myNodes =
first === undefined
? []
: first instanceof Array
? [...first, ...rest]
: [first, ...rest];
}
}
const empty = new ObjectIdentifier();
const a = new ObjectIdentifier(1);
const b = new ObjectIdentifier([1]);
const c = new ObjectIdentifier(1, 2, 3);
const d = new ObjectIdentifier([1, 2, 3]);
const e = new ObjectIdentifier([1, 2, 3], 4, 5, 6);
在最后一种情况下,您可以看到唯一的怪癖,您可以将数组作为第一个参数,后跟可变数量的数字。
答案 1 :(得分:0)
使用以下语法:
const func = (...a: number[]) => console.info('a', a)
func(1, 2, 3)
func(...[1, 2, 3])