随着Typescript的普及,在KOA2和nestjs等nodejs框架中经常看到类似于java spring中注解的写法。本文从装饰模式出发,聊聊Typescipt中的装饰器和注解。
- 什么是装饰者模式
- Typescript中的装饰器
- Typescript中的注解
- 总结
原文地址在:https://github.com/forthealllight/blog/issues/33
欢迎star
一、什么是装饰者模式
最近在看nestjs等支持Typescript的node框架,经常看到这样一种写法:
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll() {
return 'This action returns all cats';
}
}
上述代码定义了一个处理url为“/cats”的控制器,该控制器对于url为“/cats”的get方法执行findAll()函数,返回相应的字符串。
在上述的代码中,用@Controller(‘cats’)修饰CatsController类,通过@Get来修饰类中的findAll方法,这就是典型的装饰者模式。通过@Controller(‘cats’)和@Get修饰后的类CatsController,简单来说,就是拥有了丰富的“内涵”。
下面看看具体装饰者模式的定义:
我们知道继承模式是丰富子元素“内涵”的一种重要方式,不管是继承接口还是子类继承基类。而装饰者模式可以在不改变继承关系的前提下,包装先有的模块,使其内涵更加丰富,并不会影响到原来的功能。与继承相比,更加的灵活。
javascript中的装饰器处于建议征集的第二阶段,通过babel和Typescrit都可以实现装饰器的语法。
二、Typescript中的装饰器
Typescript中的装饰器与类相