我不明白此错误的含义。我试图声明一个包含两个数字的数组的数组。例如,
[[1, 2], [4, 3], [5, 6]]
这些是我正在使用的类型签名。
const knightTour = (start: number[], size: number): void => {
const [i, j] = start;
let path: number[][] = [];
const queue: Array<[number[]]> = [start];
}
但是,当我尝试初始化队列变量时出现上述错误。我在做什么错了?
答案 0 :(得分:3)
完整的错误消息是:
(parameter) start: number[] Property '0' is missing in type 'number[]' but required in type '[number[]]'.(2741)
它揭示了错误所在。
const queue: Array<[number[]]> = [start];
queue
的类型是[number[]]
的数组(数字数组的数组)
而您想使用数字数组来初始化它。
我怀疑queue
的类型不正确,应该为Array<number[]>
。
答案 1 :(得分:0)
要添加到@axiac的答案中:
类型:
[number[]]
是一种Tuple类型,它匹配大小为1的数组,其唯一元素的类型为number[]
。
因此该类型的有效值为:
[[1, 2, 3]]
[[77, 33]]
[[]]
e.t.c。显然[number[]]
不是有用的类型。我认为,如果一个元组中至少有两个元素,则一个元组类型才有意义。例如,这种类型:
[string, number, number[]]
可用于存储字符串,数字和数字数组(如果应用程序需要这样的记录)。
['one', 1, [1]]
['six', 6, [1, 2, 3, 6]]
['ten', 10, [1, 2, 5, 10]]
在您的情况下,很明显这只是一个简单的错误。意图是queue
应该是一个数组数组。因此queue
的类型可以是:
number[][]
及其定义和初始化:
const queue: number[][] = [start];
或者只是:
const queue = [start];
,让TypeScript推断number[][]
类型。