custom-decorator
github: https://github.com/enncy/custom-decorator
安装
npm i custom-decorator
例子
import { CustomDecorator } from 'custom-decorator';
// 普通写法
export function Decorator(val: string): ClassDecorator {
return (target) => {
CustomDecorator.setClassMetadata(Decorator, target, val);
};
}
@Decorator('hello')
class A {}
console.log(CustomDecorator.getClassMetadata(Decorator, A)); // hello
// 更简单的写法,第一个参数是名字,第二个参数就是需要保存的值
function SimplifyDecorator(val: string) {
return CustomDecorator.classFactory(SimplifyDecorator, val);
}
function TestMethod(val: string) {
return CustomDecorator.methodFactory(TestMethod, val);
}
function TestParameter(num: number) {
return CustomDecorator.parameterFactory(TestParameter, num * 2);
}
@SimplifyDecorator('hello')
class B {
@TestMethod('test')
test(@TestParameter(2) test: number) {}
}
console.log(CustomDecorator.getClassMetadata(SimplifyDecorator, B)); // hello
console.log(CustomDecorator.getPropertyMetadata(TestMethod, new B(), 'test')); // test
console.log(CustomDecorator.getParameterMetadata(TestParameter, new B(), 'test', 0)); // 4
defineGetter : 定义Metadata值获取器
import { CustomDecorator } from 'custom-decorator';
/**
* 有类型提示的获取器
*/
const getter = CustomDecorator.defineGetter<{
// 表示 TestMethod 这个装饰器的值类型是 string
TestMethod: [typeof TestMethod, string];
TestParameter: [typeof TestParameter, number];
}>();
// 获取值,无需多次定义返回值类型,自动提示为 string
console.log(getter.TestMethod(new B(), 'test'));
// type: string
// value: 'test'
console.log(getter.TestParameter(new B(), 'test', 0));
// type: number
// value: 4

369

被折叠的 条评论
为什么被折叠?



