【问题标题】:Why Type 'never[]' is not assignable to type 'number'为什么类型 \'never[]\' 不能分配给类型 \'number\'
【发布时间】:2022-11-14 01:00:10
【问题描述】:

我需要填写二进制矩阵。

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)***

我应该怎么做才能避免它?

【问题讨论】:

  • 空数组 [] 是 never[] 的一种

标签: typescript


【解决方案1】:

您将一个空且未定义的数组(导致never[])分配给number,因此会出现错误。你应该做什么:正确地删除这一行,因为它没有多大意义(特别是因为你在下一行用matrix[i][j] = 1 分配了一个值)。

【讨论】:

    【解决方案2】:

    错误是因为您尝试将空数组(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[] 类型的原因是因为它是新鲜.如果它是一个变量,请说:

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

    它会算作any[]。但是因为你明确地将它作为一个空数组添加到数组中,因为它是新鲜的,所以它立即使用什么类型真的正在分配:never[]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-02
      • 2021-01-12
      • 2020-05-30
      • 2020-07-29
      • 2020-08-07
      • 2019-06-24
      • 1970-01-01
      • 2021-08-18
      相关资源
      最近更新 更多