1. 数组数据类型定义

在TypeScript中,数组类型有多种定义方式,如:类型+方括号、数组泛型、接口、类数组等。

2. 数组的应用

a. [类型+方括号]表示法

  1. let fibonacci: number[] = [1, 1, 2, 3, 5];
  2. //数组中不允许出现其他的类型,如果定义了特定类型的数组
  3. let fibonacci2: number[] = [1, '1', 2, 3, 5];
  4. //编译出错
  5. - error TS2322: Type 'string' is not assignable to type 'number'.

数组方法参数也是受数组定义时所约束

  1. let fibonacci: number[] = [1, 1, 2, 3, 5];
  2. //方法或者属性也是不能是其他类型,提示出错
  3. fibonacci.push('8') ;
  4. //编译错误
  5. - error TS2322: Type 'string' is not assignable to type 'number'.
  1. b. 数组泛型
  1. let fib: Array<number> = [1, 1, 2, 3, 5];
  2. fib.push(8) ;
  3. console.log('fib:',fib) ;
  1. c. 用接口表示数组
  1. interface NumberArray {
  2. [index: number]: number
  3. }
  4. let fibArray: NumberArray = [1, 1, 2, 3, 5]

NumberArray表示:只要是索引数据类型时数值事,name值必须是数值。虽然接口也可以来描述数组,但是一般不采用此类做法。
d. 类数组
类数组(Array-like Object) 不是数组类型,比如arguments

  1. function sum() {
  2. let args: number[] = arguments;
  3. }
  4. //编译错误
  5. - error TS2740: Type 'IArguments' is missing the following properties from type 'number[]': pop, push, concat, join, and 15 more.

上述示例中,arguments实际上是个类数组,但是不能用普通的数组方式来描述,需要接口的方式,如下:

  1. function sum() {
  2. let args: {
  3. [index: number]: number;
  4. length: number;
  5. callee: Function;
  6. } = arguments;
  7. }

在上述示例中,我们除了约束当索引的数据类型为数值时,值的类型必须是数值外,也约束了他的两个属性:lengthcallee
事实上常用的类数组都有自己的接口定义,如:IArgumentsNodeListHTMLCollection等。

  1. function sumFunc() {
  2. let args: IArguments = arguments
  3. }
  1. e. any在数组中的应用
  1. let list: any[] = ['hello', 22, { website: 'www.baidu.com' }, 'male', true]