数组的类型

使用类型 + []表示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 类型加[]
let arr: string[] = ['1', '2', '3']
// 会报错,数组里面的元素只能是string类型
let arr: string[] = ['1', '2', 3]
// 操作方法添加也是不允许的
let arr: string[] = ['1', '2', '3']
arr.unshift(1)

// number类型
let arr: number[] = [1, 2, 3]
// boolean类型
let arr: boolean[] = [true, false]
// any类型
let arr: any[] = [1, '2', true]

数组的泛型

使用 Array<类型> 表示,等价与 类型[],在场景不确定数据具体类型时只能使用泛型定义数组的类型,使用 Array<T> 而不能使用 T:[]

1
let arr: Array<number> = [1, 2, 3, 4, 5]

接口表示数组类型

一般用来描述类数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 表示索引的类型是数字时,那么值的类型必须是数字,
// 数组的索引都是数字,所以可以用接口来定义数组类型
interface arrayNumber {
[index: number]: number
}

let arr: arrayNumber = [1, 2, 3]

// 这种写法也是可以得
interface arrayNumber {
[index: number]: string
}

let arr: arrayNumber = ['1', '2', '3']

多维数组

1
let data: number[][] = [[1, 2], [3, 4]]

arguments类数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function add(...args: any): void {
console.log(arguments)
// 会报错,arguments是个类数组,不能赋值给number数组
let arr: number[] = arguments
}

function add(...args: any): void {
// ts已经内置了IArguments对象 来定义arguments
let arr: IArguments = arguments
console.log(arr)
}

add('antVae')

// 其中IArguments是 TypeScript 中定义好了的类型,它实际上就是
interface IArguments {
[index: number]: any,
length: number,
callee: Function
}

...args 剩余参数和 arguments 对象的区别

  • ...args剩余参数(展开运算符)
    如果函数的最后一个命名参数用...为前缀,它会将后面所有剩余的实参个数包裹成一个数组

    1
    2
    3
    4
    5
    function add(age: number, sex: string, ...args: any): void {
    // 结果为(18, '男',['antVae', '喜欢爬山'])
    console.log(age, sex, args)
    }
    add(18, '男', 'antVae', '喜欢爬山')
  • arguments对象
    在函数中,使用特殊对象arguments,开发者无需指定明确的参数名,就能访问它们。arguments 对象并不是一个数组,而是一个类数组对象

    • arguments 中包含了函数传递的参数,length和callee属性
    • length 属性表示的是实参的长度,即调用函数的时候传入的参数个数
    • callee 属性则只想的函数自身,我们可以通过它来调用自身函数
    • arguments 是一个经典的类数组对象,我们可以通过 Function.call 或者 Function.apply 方法来间接调用数组的方法, 也可以通过 Array.prototype.sliceArray.prototype.splice 等方法把类数组对象转换成真正的数组
      1
      2
      3
      4
      5
      6
      7
      function add(name: string, ...args: any): string {
      // 结果为(['喜欢爬山'], [Arguments] { '0': 'antVae', '1': '喜欢爬山' })
      console.log(args, arguments)
      return Array.prototype.slice.call(arguments).join('')
      }
      // 结果为 antVae喜欢爬山
      console.log(add('antVae', '喜欢爬山'))

any在数组中的应用

一个常见的例子就是数组中可以存在任意类型

1
let arr: any[] = [1, 'antVae', false, {sex: '男'}, []]