从角度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];
您能告诉我解决这个问题的更好方法吗?
答案 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]);