简介
介绍:装饰器是一种特殊类型的声明,它能够被附加到类,方法, 访问器,属性或参数上。用 @添加
装饰器本质上还是一个函数,在别的语言中已广泛使用,如: python, 但在TS中依旧为一个测试中的版本,若要启 用实验性的装饰器特性,你必须在命令行或tsconfig.json里启用experimentalDecorators编译器选项
添加到类上, 类装饰器
添加到方法上,方法装饰器
添加到访问器上,访问器装饰器
添加到属性上,属性装饰器
添加到参数上,参数装饰器
装饰器工厂:如果我们要定制一个修饰器如何应用到一个声明上,我们得写一个装饰器工厂函数。 装饰器工厂就是一个简 单的函数,它返回一个表达式,以供装饰器在运行时调用
类的装饰器
- 类装饰器就在类声明之前被声明
- 类装饰器被应用于类的构造函数,可以用来观察、修改或替换类定义
- 类装饰器不能用在声明文件中( .d.ts),也不能用在任何外部上下文中(比如declare的类)
- 类装饰器表达式会在运行时当作函数被调用,类的构造函数作为其唯一的参数
- 如果类装饰器返回一个值,它会使用提供的构造函数来替换类的声明。
function testDecorator(constructor: any) {
constructor.prototype.uname = "张三";
constructor.prototype.show = (): void => {
console.log(`我是${
constructor.prototype.uname}`);
};
}
@testDecorator
class Person {
}
let person = new Person();
// person.show(); 类型“Person”上不存在属性“show”
(person as any).show();
// 使用工厂函数
function testDecorator(flag: boolean) {
if (flag) {
return function (constructor: any) {
constructor.prototype.uname = "张三";
constructor.prototype.show = (): void => {
console.log(`我是${
constructor.prototype