TypeScript基础
类型基础
强类型语言
java
C#
Python
C/C++
弱类型语言
JavaScript
PHP
静态类型语言
java
C#
C/C++
动态类型语言
JavaScript
PHP
Python
基本类型
boolean
number
string
null
undefined
any
never
抛异常
死循环
void
Array
type[]
Array
Tuple
限定元素个数与类型的数组
function
object
Symbol
枚举类型
数字枚举
枚举成员默认从0递增
字符串枚举
不支持反向映射
异构枚举
枚举成员
拥有只读属性
const member(在编译阶段被计算出结果)
1. 无初始值
2. 对常量成员的引用
3. 常量表达式
computed member(表达式保留到程序的执行阶段)
常量表达式
常量枚举
编译后被移除
成员只能为 const member
枚举/枚举成员作为类型
1 无初始值
2 枚举成员均为数字
3 枚举成员均为字符串
接口
对象类型接口
检查原则:鸭式辩型法
绕过对象字面量检查
1. 将对象字面量赋值给变量
2. 使用类型断言
3. 使用字符串索引签名
对象的属性
可选属性
只读属性
可索引类型接口
数字索引(相当于数组): [index:number]
字符串索引: [x:string]
函数类型接口
混合类型接口
类类型接口
#### 类必须实现接口中的所有属性
接口只能约束类的公有成员,不能约束私有成员,受保护成员,静态成员,构造函数
接口继承接口
抽离可重用的接口
将多个接口整合成一个接口
接口继承类
抽象出类的公有成员,私有成员,受保护成员
函数
定义函数
定义方式
1. function
2. 变量定义
3. 类型别名
4. 接口定义
类型要求
参数类型必须声明
返回值类型一般无需声明
函数参数
参数个数
参数类型必须声明
返回值类型一般无需声明
可选参数
必须参数不能位于可选参数之后
默认参数
在必选参数前,默认参数不可省略
在必选参数后,默认参数可以省略
剩余参数
函数重载
静态类型语言
函数的名称相同,参数的个数或类型不同
typescript
预先定义一组名称相同,类型不同的函数声明,并在一个类型最宽松的版本中实现
类
基本实现
类中定义的属性都是实例属性,类中定义的方法都是原型方法
实例属性必须具有初始值,或在构造函数中被赋值,或为可选成员
继承
子类的构造函数中必须包含 super 调用
成员修饰符
1 public
对所有人可见,所有成员默认为public
2 private
只能在被定义的类中访问,不能通过实例或子类访问
private constructor: 不能被实例化,不能被继承
3 protected
只能在被定义的类和子类中访问,不能再实例中访问
protected constructor: 只能被实例化,不能被继承
4 readonly
必须具有初始值,或在构造函数中被赋值
5 static
只能由类名调用,不能通过实例访问,可继承
构造函数参数中的修饰符
将参数变为实例属性
抽象类
不能被实例化,只能被继承
抽象方法含具体实现
子类直接复用
抽象方法不含具体实现
子类必须实现
多态
多个子类对父抽象类的方法有不同实现,实现运行时绑定
this类型
实现实例方法的链式调用
在继承时,具有多态性,保持父子类质检接口调用的连贯性
泛型
支持多种类型的方法
1 函数重载
2 联合类型
3 any类型
丢失类型约束
4 泛型
不预先确定类型,使用时才确定
泛型函数
定义
调用
泛型函数类型
泛型接口
定义
实现
泛型类
定义
实例化
泛型约束
T extends U(T必须具有U的属性)
类型检查机制
类型推断
含义: 根据某些规则自动为变量推断出类型
1 基础类型推断
1 初始化变量
2 设置函数默认参数
3 确定函数返回值
2 最佳通用类型推断
推断出一个可以兼容当前所有类型的通用类型
3 上下文推断
根据事件绑定推断出事件类型
类型断言
含义: 用自己声明的类型覆盖类型推断
方式
表达式 as type
表达式
弊端
没有按照接口的约定赋值,不会报错
类型兼容性
含义:如果X(目标类型) = Y(源类型),则X兼容Y
接口兼容性
成员多的兼容成员少的(鸭式辩型法)
函数兼容性
1 参数个数:目标函数多余源函数
可选参数和剩余参数,遵循原则
1 固定参数兼容可选参数和剩余参数
2 可选参数不兼容固定参数和剩余参数 (严格模式)
3 剩余参数兼容固定参数和可选参数
2 参数类型:必须匹配
参数为对象
严格模式
####### 成员多的兼容成员少的 ####### 非严格模式 ######## 相互兼容(函数参数双向协变)