基础类型
- 布尔值,boolean
- 数字,number
- 字符串,string
- 数组,number[]和Array<number>
- 元组,[string, number]
- 枚举,对javascript标准数据类型的一个补充。enum Color {Red, Green, Blue}
- 任意值,any
- 空值,void
- null和undefined,默认情况下,null和undefined是所有类型的子类
- never,表示永不存在的值的类型,比如总是会抛出异常或者不会有返回值(返回void也是有返回值)的函数
- 类型断言,类似强制类型转换:(<string>someValue).length或者(someValue as string).length,两种语法等价,但JSX中只有as语法合法。
变量声明
- var声明可以在包含它的函数、模块、命名空间或全局作用域内部任何位置被访问(而不是代码块)
- let声明使用的是词法作用域或块作用域
- var在同一作用域内无论被声明多少次都只会得到指向同一个引用的变量,let在同一作用域内重声明会报错
接口
- Typescript的核心原则之一是对值所具有的结构进行类型检查,接口的作用就是为这些类型命名和你的代码或者第三方代码定义契约。
- 索引签名 interface SquareConfig {
color?: string;
width?: number;
[propName: string]: any; //这里是索引签名
} - 接口可以继承类,仅继承其声明,不继承其实现
函数
- 定义行为的地方
- 函数可以使用函数体外部的变量
- TypeScript里传递给一个函数的参数个数必须与函数期望的参数个数一致
- 可选参数(用?标记)一定在必须参数后面
- Javascript中,函数里的this是函数被调用时的this,而不是定义时的this;通过ES6语法的箭头函数,能够将this绑定在被定义时
泛型
- 泛型函数function identity<T>(arg: T): T
- 泛型类
class GenericNumber<T> {
zeroValue: T;
add: (x: T, y: T) => T;
} - 泛型约束extends:function loggingIdentity<T extends Lengthwise>(arg: T): T
枚举
- enum Direction {
Up,
Down,
Left,
Right
} - 普通枚举编译后是一个即时执行函数
- 常数枚举是在enum前面加上一个const,常数枚举可以避免生成多余的代码和间接引用,常数枚举只能使用常数枚举表达式
类型推论
- 最佳通用类型
- 上下文
类型兼容性
- TypeScript里的类型兼容性是基于结构子类型的,而不是基于名义
高级类型
- 交叉类型 T&U,一个类型具有这些所有类型的特性,并集
- 联合类型 T|U,只能访问交集
- 自定义类型保护,返回值为一个类型谓词,parameter is Type
- typeof类型保护,typeof parameter === 'type'
- 类型别名,type Name = string,然后可以用Name代替string
Iterators和Generators
- for...of迭代是对象的值,ES6引入,for...in迭代对象的键