少侠们,今天我们继续来搞一搞TS

今天我们要来看一看TS中数组的定义是个什么鬼样子

数组的类型:

在 TypeScript 中,数组类型有多种定义方式,比较灵活。下面我们来看看有哪些定义方法

  「类型 + 方括号」表示法:

    最简单的方法是使用「类型 + 方括号」来表示数组:  

let  tsArray: number[] = [,,,,]

    数组中的项中不允许出现其他类型

let fibonacci: number[] = [, '', , , ];

// index.ts(1,5): error TS2322: Type '(number | string)[]' is not assignable to type 'number[]'.
// Type 'number | string' is not assignable to type 'number'.
// Type 'string' is not assignable to type 'number'.

    上例中,[1, '1', 2, 3, 5] 的类型被推断为 (number | string)[],这是联合类型和数组的结合。

    数组的一些方法的参数也会根据数组在定义时约定的类型进行限制:

let fibonacci: number[] = [, , , , ];
fibonacci.push(''); // index.ts(2,16): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.

    上例中,push 方法只允许传入 number 类型的参数,但是却传了一个 string 类型的参数,所以报错了。  

  数组泛型:  

    也可以使用数组泛型(Array Generic) Array<elemType> 来表示数组:  

let fibonacci: Array<number> = [, , , , ];

    关于泛型,大家可以先仔细学习一下,后面我们也会学到

  用接口表示数组:

interface NumberArray {
[index:number]: number;
}
let fibonacci: NumberArray = [,,,,]

    NumberArray 表示:只要 index 的类型是 number,那么值的类型必须是 number

  any 在数组中的应用

    一个比较常见的做法是,用 any 表示数组中允许出现任意类型:

let list: any[] = ['Xcat Liu', , { website: 'http://xcatliu.com' }];

  类数组(特别注意)

    类数组(Array-like Object)不是数组类型,比如 arguments

function sum() {
let args: number[] = arguments;
} // index.ts(2,7): error TS2322: Type 'IArguments' is not assignable to type 'number[]'.
// Property 'push' is missing in type 'IArguments'.

    事实上常见的类数组都有自己的接口定义,如 IArgumentsNodeListHTMLCollection 等:

function sum() {
let args: IArguments = arguments;
}

好了,以上就是TS里面的数组类型

参考文章:https://github.com/xcatliu/typescript-tutorial/blob/master/basics/type-of-array.md

最新文章

  1. 软件工程(FZU2015)赛季得分榜,第11回合(beta冲刺+SE总结)
  2. cookie的session_id解释
  3. Oracle基础笔记
  4. Linux基本权限学习
  5. Orchard源码分析(6):Shell相关
  6. jQery无缝滚动效果
  7. (转)关于CoreData的一个工具Mogenerator的使用
  8. ubuntu12.04已安装SQLite3 而简单易用
  9. surfaceView和Camera配合进行摄像头的预览
  10. mavean的依赖传递和排除依赖
  11. 数组中的第K个最大元素leetcode(Top K的问题)
  12. 关于 Senparc.Weixin.Cache.Redis 引用的 StackExchange.Redis 版本不匹配的反馈测试
  13. 【Java】JDK/JVM相关工具
  14. Nginx安装echo模块
  15. poj 3304
  16. BesLyric 全新版本下载 ( windows \ mac \ linux )
  17. [phomeflashpic]怎样调用帝国CMS图片幻灯效果
  18. AdaBoost Classifier和Regressor
  19. Jmeter自动化测试 数据驱动测试,将数据存入csv文件中来调用,或将数据存在DB中进行调用
  20. iOS UI-UIScrollView控件实现图片缩放功能

热门文章

  1. HTML标题 段落 样式
  2. [编译] 4、在Linux下搭建nRF51822的开发烧写环境(makefile版)
  3. 大数据与云计算的关系是什么,Hadoop又如何参与其中?Nosql在什么位置,与BI又有什么关系?
  4. [Swift]LeetCode826. 安排工作以达到最大收益 | Most Profit Assigning Work
  5. Metrics.NET step by step
  6. 14.Git分支-rebase有趣的例子、变基带来的问题及解决方案
  7. 9.Flask Cookie和Session
  8. 采坑:python base64
  9. C#版 - 226. Invert Binary Tree(剑指offer 面试题19) - 题解
  10. 深入浅出ASP.NET Core系列(入门篇)