Array 类型

初始化

number[]、Array
二维: number[][]、Array>

注意, 函数泛型在前, (x: T)

  1. let list: number[] = [1, 2, 3];
  2. // ES5:var list = [1,2,3];
  3. let list: Array<number> = [1, 2, 3]; // Array<number>泛型语法
  4. // ES5:var list = [1,2,3];
  5. Array<number | string> = [1, 2, 3, '4']
  6. // 二维数组
  7. let grid: number[][] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

数组解构

  1. let x: number; let y: number ;let z: number;
  2. let five_array = [0,1,2,3,4];
  3. [x,y,z] = five_array;

数组展开运算符

  1. let two_array = [0, 1];
  2. let five_array = [...two_array, 2, 3, 4];

数组遍历

  1. let colors: string[] = ["red", "green", "blue"];
  2. for (let i of colors) {
  3. console.log(i);
  4. }

Set

  1. let ans: Set<number> = new Set();

Tuple元祖

出现的意义:

更准确的约束数组元素

  1. // 姓名,年龄, 收入
  2. let userInfo: (number | string)[] = ['Jack', 18, '3500'];
  3. // '3500'会错误提示
  4. let userInfo: [string, number, number] = ['Jack', 18, '3500'];

什么是元祖:

数量有限,每项类型固定
使用场景:csv、excel导出文件数据转js时

  1. // 元祖类型
  2. const teacherInfo: [string, number, string] = ['Jack', 29, 'beijing']
  3. // csv
  4. const teacherList: [string, number, string][] = [
  5. ['Jack', 29, 'beijing'],
  6. ['Jack', 29, 'beijing'],
  7. ['Jack', 29, 'beijing'],
  8. ]

数组 VS 元祖

强类型转换

  1. function person() {
  2. const name: string = 'Jack';
  3. const age: number = 24;
  4. // return [name, age] as const;
  5. return <const>[name, age];
  6. }
  7. const p1 = person();
  8. const [name] = p1;

homework: 实现元祖转数组函数

  1. function tuplify<T extends unknown[]>(elements: T): T {
  2. return elements;
  3. }
  4. const userInfo: [string, number] = ['Jack', 11];
  5. console.log(tuplify(userInfo));
  6. // [ 'Jack', 11 ]