typescript 为什么类型'never[]'不能赋给类型'number'

xj3cbfub  于 2022-11-18  发布在  TypeScript
关注(0)|答案(1)|浏览(338)

我需要填写二进制矩阵。

const matrix: number[][] = [];

for (let i = 0; i < 7; i++) {
  for (let j = 0; j < 7; j++) {
    if (!matrix[i]) matrix[i] = [];

    if (!matrix[i][j]) matrix[i][j] = []; //here is TS exception
    matrix[i][j] = 1;
  }
}

matrix[i][j] = []-抛出TS异常-Type 'never[]' is not assignable to type 'number'.ts(2322)***
我该怎么做才能避免它?

mrwjdhj3

mrwjdhj31#

这个错误是因为您尝试将一个空的数组(never[])赋给number。基于您的原始矩阵变量是一个二维数组,这意味着您的第二个检查是无用的,您可以删除它。

const matrix: number[][] = [];

for (let i = 0; i < 7; i++) {
  for (let j = 0; j < 7; j++) {
    if (!matrix[i]) matrix[i] = [];

    // useless (and invalid) check!
    // if (!matrix[i][j]) matrix[i][j] = []; 

    matrix[i][j] = 1;
  }
}

typescript Playground
一个空数组的类型为never[]的原因是因为它的 freshness。如果它是一个变量,比如:

const arr = []
//    ^? -- any[]

它将被视为any[] .但是由于你将它显式地作为一个空数组添加到数组中,由于它是新鲜的,它立即使用赋值时 really 的类型:never[]

相关问题