ArkTS支持TS5.0之前的TS装饰器语法。
注意,如果在.ets文件中定义装饰器,则需要同时满足[ArkTS的语法规则],比如不能使用any等。
参考代码如下:
function MyDescriptor(target: Object, key: string, descriptor: PropertyDescriptor) {
const originalMethod: Function = descriptor.value
descriptor.value = (...args: Object[]) => {
// 获取被装饰方法的名称、入参、返回值
console.log(`Calling ${target.constructor.name} method ${key} with argument: ${args}`)
const result: Object = originalMethod(...args)
console.log(`Method ${key} returned: ${result}`)
return result
}
return descriptor
}
@Entry
@Component
export struct MyDescriptorCom {
@State message: string = 'Hello World';
@MyDescriptor
demoFunc(str:string) {
return str
}
aboutToAppear(): void {
this.demoFunc('DemoTest')
}
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
}
.height('100%')
}
}