打字稿-类型中缺少属性“ 0”

时间:2020-07-25 07:31:14

标签: typescript

我不明白此错误的含义。我试图声明一个包含两个数字的数组的数组。例如,

[[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];
}

但是,当我尝试初始化队列变量时出现上述错误。我在做什么错了?

2 个答案:

答案 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[][]类型。