学习本章节之前,先看这里!!!
学习完 ECMAScript6 新特性模块之后再来学习 TypeScript 效果会更佳,假如你还没有学习 ECMAScript6 新特性,请点击ECMAScript6 新特性模块进行学习,之后再来学习本章节!

学习完 ECMAScript6 新特性模块之后再来学习 TypeScript 效果会更佳,假如你还没有学习 ECMAScript6 新特性,请点击ECMAScript6 新特性模块进行学习,之后再来学习本章节!


JavaScript 的类型分为两种:原始数据类型和对象类型(也就是我们平时说的基本数据类型与引用数据类型)
提示
在这里null和undefined我们依然归类为特殊类型

TypeScript 像 JavaScript 一样可以操作数组元素。 有两种方式可以定义数组。
第一种,可以在元素类型后面接上 [],表示由此类型元素组成的一个数组
第二种方式是使用数组泛型, Array<元素类型>
let list: number[] = [1, 2, 3]
let list: Array<number> = [1, 2, 3] // 推荐

数组合并了相同类型的对象,而元组(Tuple)合并了不同类型的对象
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。它弥补了数组的不足, 比如,元组可以[“苹果”,”苹果”,”苹果”,”橘子”],而数组就不能。
三要点
已知数量
已知类型
前后对应

有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。 这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。 这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。 那么我们可以使用 any 类型来标记这些变量
如果是一个普通类型,在赋值过程中改变类型是不被允许的
let age: number = 30
age = 'Hello' // 报错

枚举(Enum)类型用于取值被限定在一定范围内的场景,比如一周只能有七天,颜色限定为红绿蓝等
枚举使用 enum 关键字来定义
enum Days {
Sun,
Mon,
Tue,
Wed,
Thu,
Fri,
Sat,
}
console.log(Days['Sun'] === 0) // true
console.log(Days['Mon'] === 1) // true
console.log(Days['Tue'] === 2) // true
console.log(Days['Sat'] === 6) // true
console.log(Days[0] === 'Sun') // true
console.log(Days[1] === 'Mon') // true
console.log(Days[2] === 'Tue') // true
console.log(Days[6] === 'Sat') // true

联合类型(Union Types)表示取值可以为多种类型中的一种
当我们需要定义的数据并不确定是那种类型的时候,可以使用联合类型
偶尔你会遇到这种情况,一个代码库希望传入 number或 string类型的参数。虽然使用any可以实现,但是它也会让除number和string之外的其他类型通过编译,联合数据类型就弥补了any的不足

函数是 JavaScript 应用程序的基础。在 TypeScript 里函数仍然是主要的定义行为的地方
在 JavaScript 中,常见函数定义形式
function add(x, y) {
return x + y
}
let add = function (x, y) {
return x + y
}

虽然 JavaScript 中有类的概念,但是可能大多数 JavaScript 程序员并不是非常熟悉类,这里对类相关的概念做一个简单的介绍
new 生成Cat 和 Dog 都继承自 Animal,但是分别实现了自己的 eat 方法。此时针对某一个实例,我们无需了解它是 Cat 还是 Dog,就可以直接调用 eat 方法,程序会自动判断出来应该如何执行 eatpublic 表示公有属性或方法
TypeScript 的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做 “鸭式辨型法” 或 “结构性子类型化”。 在 TypeScript 里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约
下面通过一个简单示例来观察接口是如何工作的
function printLabel(labeledObj: { label: string }) {
console.log(labeledObj.label)
}
let myObj = {
label: 'Size 10 Object',
}
printLabel(myObj)