装饰器工厂
unioc内部提供了一些装饰器工厂,用来创建同时兼容legacy
和stage3
两种环境的装饰器。
两种环境的区别
2023年1月,TypeScript 4.9 版本正式发布,首次将TC39 stage 3
的装饰器引入到了TypeScript中。但是,目前大多数的IoC
框架仍然停留在legacy
阶段,仍然未兼容stage3
的装饰器。在当下这个时间点,unioc为了推动TS
社区发展,内部提供一些装饰器工厂函数,用于创建同时兼容legacy
和stage3
的装饰器,并且提供一系列的metadata
元数据设置/扫描器以及一系列与emitDecoratorMetadata
(即reflect-metadata
包)兼容的API。
NOTE
相关API存放于unioc/meta
以及unioc/decorator
并支持tree-shaking
,哪怕您不使用unioc
的核心容器API,也可以使用这些API去创建装饰器,这样您的装饰器会变得兼容性更强,允许在legacy
和stage3
两种环境下使用🎉
这可能对一些装饰器库开发者来说会非常有用,比如利用装饰器进行一些数据校验的库等。
defineClassDecorator
用于定义一个统一的类装饰器。
ts
import { defineClassDecorator } from 'unioc/decorator'
function MyClassDecorator() {
return defineClassDecorator({
onClassDecorate(target) {
// some your logic 🪄
}
})
}
@MyClassDecorator()
class MyClass {}