Skip to the content.

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 参数类型:必须匹配
参数为对象
严格模式

####### 成员多的兼容成员少的 ####### 非严格模式 ######## 相互兼容(函数参数双向协变)

3 返回值类型
目标函数必须与源函数相同,或为其子类型

枚举兼容性

枚举类型和数字类型互相兼容
枚举类型质检不兼容

类兼容性

静态成员和构造函数不在比较范围
两个类具有相同的实例成员,它们的实例相互兼容
类中包含私有成员和受保护成员,只有父类和子类的实例互相兼容

泛型兼容性

泛型接口:只有类型参数T被接口成员使用时,才会影响兼容性
泛型函数:定义相同,没有指定类型参数时就兼容

类型保护

含义:在特定的区块中保证变量属于某种确定的类型

创建区块的方法

1 instanceof
2 typeof
3 in
4 类型保护函数
特殊的返回值: arg is type(类型谓词)

高级类型

交叉类型(类型并集)

含义:将多个类型合并作为一个类型,新的类型将具有所有类型的特性

应用场景:混入

联合类型(类型交集)

含义:类型并不确定,可能为多个类型中的一个

应用场景:多类型支持

可区分的联合类型:结合联合类型和字面量类型的类型保护方法

字面量类型

字符串字面量

数字字面量

应用场景:限定变量取值返回

索引类型

要点

1 keyof T(索引查询操作符): 类型 T 公共属性名的字面量联合类型
2 T[K] (索引访问操作符): 对象 T 的属性K 所代表的类型
3 泛型约束

应用场景

从一个对象中选取某些属性的值

映射类型

含义:从旧类创建出新类型

应用场景

Readonly: 将 T 的所有属性变为只读
Partial: 将 T 的所有属性变为可选
Pick: 选取以K 为属性的对象 T 的子集
Record: 创建属性为K 的新对象,属性值得类型为T

条件类型

含义: T extends U ? X: Y(如果类型 T 可以赋值给类型 U 那么结果类型就是X 否则就是 Y)

应用场景

Exclude: 将 T 中过滤掉可以赋值给U 的类型
Extract: 从 T 中抽取出可以赋值给U 的类型
NonNullable: 从 T 中除去 undefined null
ReturnType: 获取函数的返回值类型

返回首页