数组的类型
在 Typescript 中,数组类型有很多种定义的方式,比较灵活
[类型+方括号] 表示法
最简单的方法是使用[类型+ 方括号] 来表示数组
let fibonacci: number[] = [1, 1, 2, 3, 4]
数组的项中 不允许出现其他的类型
let fibonacci: number[] = [1, '2', 1, 4, 5, 6]
//报错误
- 在例如
let fibonacci: number[] = [1, 1, 2, 3, 5]
fibonacci.push('8')
//报错误
上例中,push 方法只允许传入 number 类型的参数,但是却穿了一个字符串 8 的类型参数,所以报错了
数组泛型
- 我们也可以使用数组泛型来表示数组
let fibonacci: Array<number> = [1, 1, 2, 3, 5]
用接口表示数组
- 我们也可以用接口描述数组
interface NumberArray {
[index: number]: number;
}
let fibonacci: NumberArray = [1, 1, 2, 3, 5]
NumberArray 表示 只要索引的类型是数字,那么值得类型必须是数字
虽然接口也可以描述数组,但是我们一般不那么错。因为这种情况会复杂很多。
但是有一种情况例外,那就是类数组
类数组
类数组不是数组类型,比如 arguments
function sum() {
let args: number[] = arguments
}
//直接报错
应该是
function sum() {
let args: {
[index: number]: number,
length: number,
callee: Function,
} = arguments
}
在这个例子中,我们除了约束当索引的类型是数字的时候,值的类型必须是数字意外,还约束了他必须有 length 和 callee 两个属性
事实上我们写最后的接口应该是这样
interface Iargs {
[index: number]: any;
length: number;
callee: Function;
}
function sum() {
let args: Iargs = arguments
}
any 在数组中的应用
一个比较常见的作法,就是用 any 表示数组中允许出现的任意类型
let list: any[] = ['xxx', 111, { website: 'http:www.baidu.com' }]