错误:输入'[数字] | [数字,数字,数字,数字]'不能分配给类型[[数字]'

时间:2018-09-21 10:44:24

标签: angular typescript

从角度5.1更新到6.1之后,我凝视着从代码中收到一些错误,如下所示:

  

错误:ngc编译失败:components / forms / utils.ts(5,3):错误   TS2322:键入'[数字] | [数字,数字,数字,数字]'不是   可分配给“ [数字]”类型。

遵循代码:

export function bsColumnClass(sizes: [number]) {

  let sizebs = ['col-xs-', 'col-sm-', 'col-md-', 'col-lg-',];

  sizes = sizes || [12, 12, 12, 12];

  let className = sizes.map(function callback(value, index, array) {
    return sizebs[index].concat(value.toString());
  }).join(" ");

  return className;
}

我注意到问题是因为我有一个函数参数sizes: [number],然后我被训练去做以下代码行:sizes = sizes || [12, 12, 12, 12];

您能告诉我解决这个问题的更好方法吗?

3 个答案:

答案 0 :(得分:4)

在Typescript中,数组的声明方式如下

type[]

代替

[type]

如果您尝试使用这些更改来编写代码,那么它应该可以工作,但是,如果我写错了,请纠正我,但是,如果大小未定义,您是否要尝试为大小分配一个数字列表?

如果是这样,则应相应地键入函数

function bsColumnClass(sizes?: number[]) {
}

将确保该事件,如果您不向该函数提供变量,则代码将保持静态类型并接受变量参数

答案 1 :(得分:1)

如果要定义数字数组,语法为number[](通常对于数组,我们使用type[])。您定义的是一个元组类型,它具有固定数量的元素,并且可以具有异构元素类型。

export function bsColumnClass(sizes: number[]) {


}

或者,如果您要强制调用方在数组中恰好传递4个元素,在sizebs是固定的情况下,这似乎很有意义,则可以使用元组类型:

export function bsColumnClass(sizes: [number, number, number, number]) {

  let sizebs = ['col-xs-', 'col-sm-', 'col-md-', 'col-lg-',];

  sizes = sizes || [12, 12, 12, 12];

  let className = sizes.map(function callback(value, index, array) {
    return sizebs[index].concat(value.toString());
  }).join(" ");

  return className;
}

答案 2 :(得分:0)

有问题的是我在参数sizes: [number]中发现语法问题,而不是可以使用sizes: number[]

您可以尝试以下方法:

export function bsColumnClass(sizes: number[]) {
  const sizebs = ['col-xs-', 'col-sm-', 'col-md-', 'col-lg-'];

  sizes = sizes || [12, 12, 12, 12];

  const className = sizes
    .map(function callback(value, index, array) {
      return sizebs[index].concat(value.toString());
    })
    .join(' ');

  return className;
}

//bsColumnClass([1, 2, 6, 3]);