Typescript 数组的类型 (六)

数组的类型

在 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' }]

文章作者: 雾烟云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 雾烟云 !
  目录