Decorator 不推荐
WARNING
- 装饰器的方案并未完全确立,有可能在正式版发生变动!
- 装饰器默认不受支持,需要在 tsconfig.json 中开启
类装饰器
ts
// 接收构造器作为参数
@toClass()
class Person {}
function toClass(str: string) {
return (constructor: Function) => {};
}
属性装饰器
- 属性是实例属性时,一参为原型对象
- 属性是静态属性时,一参为构造器
- 二参为属性名
ts
class Person {
toProps();
name = "实例属性";
static name = "静态属性";
}
function toProps() {
return (obj: object, name: string) => {};
}
方法装饰器
- 属性是实例属性时,一参为原型对象
- 属性是静态属性时,一参为构造器
- 二参为属性名
- 三参为属性描述对象
ts
class Person {
@toFun()
fun() {}
@toFun()
static fun();
}
function toFun() {
return (obj: object, name: string, descript: object) => {};
}
取值器装饰器
- 属性是实例属性时,一参为原型对象
- 属性是静态属性时,一参为构造器
- 二参为属性名
- 三参为属性描述对象
ts
class Person {
@toGetter()
get age() {}
@toGetter()
static get age() {}
}
function toGetter() {
return (obj: object, name: string, descript: object) => {};
}
参数装饰器
- 方法是实例成员时,一参为原型对象
- 方法是静态成员时,一参为构造器
- 二参为参数名
- 三参为参数的索引
ts
class Person {
fun(@toParams params: string) {}
static fun(@toParams params: string) {}
}
function toParams(obj: object, name: string, index: number) {}