开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情
泛型的兼容性
因为ts是一个结构化的类型系统,类型参数只在作为成员类型的一部分被消耗时影响到结果类型 这两个泛型是兼容的,因为这个泛型并没有被消耗
interface Empty<T> {
}
let x: Empty<number>;
let y: Empty<string>;
x = y;
y = x;
下慢代码就报错了,因为泛型被消耗了,然后两个泛型的类型不同,所以不兼容
interface NotEmpty<T> {
data:T
}
let x: NotEmpty<number>;
let y: NotEmpty<string>;
x = y;
y = x;
装饰器
介绍: 装饰器是一种特殊类型的声明,他能够附加到类,方法,访问器,属性或者参数上,用@添加 装饰器本质上是一个函数,在别的语言中已广泛使用,如:python,但是在TS中仍然是一个测试版本,若要启用实验的装饰器特性,你必须在命令行或者tsconfig.json中重启experimentalDecorators编译器选项 装饰器分类
- 添加到类上,类装饰器
- 添加到方法上,方法装饰器
- 添加到访问器上,访问器装饰器
- 添加到属性上,属性装饰器
- 添加到参数上,参数装饰器
装饰器工厂:
如果我们定制一个装饰器如何应用到一个声明上,我们写一个装饰器工厂函数,装饰器工厂就是一个简单的函数,他返回一个表达式,以供装饰器在运行时调用
类的装饰器
- 类装饰器就在类声明前声明
- 类装饰器被应用于类的构造函数,可以用来观察/修改替换类定义
- 类装饰器不能声明文件中,也不能用在任何外部上下文中(比如declare的类)
- 类装饰器表达式会在运行时当作函数调用,类的构造函数作为其唯一参数
- 如果类装饰器返回一个值,它会使用提供的构造函数来替换类的声明