应用于类的声明,必须在类声明之前声明
function classDec ( target: new() => any ) {}
@classDec
class ClassName {}
- 参数说明
- targer:装饰的类
示例
function addName ( name: string ) {
return ( target: new() => any ) => {
target.prototype.name = name
}
}
@addName('阿坤')
class People {}
类的重载
如果类装饰器返回一个值,这个值会替换掉被装饰类的声明
function classDec ( target: any ) {
return class{
...
}
}
被装饰类的声明,会被彻底替换掉,最终只有返回类中的成员
function classDec ( target: any ) { return class extends target { ... } }
可以通过返回类继承被装饰类,保留原本的成员,并进行扩展