use-on-demand
Version:
50 lines • 2.32 kB
JavaScript
/**
* 33.关于强大的【装饰器】,采用这样一篇文章,即可:
* 33.1 从 JavaScript 到 TypeScript 4 - 装饰器和反射 - 听·说 - SegmentFault 思否 - https://segmentfault.com/a/1190000011520817
*
*/
import { __decorate, __metadata } from "tslib";
// TIP 以下,还有反射的情况
/**
* 反射可以获得对象的:
* 1.对象的类型
* 2.成员/静态属性的信息(类型)
* 3.方法的参数类型、返回类型
*
* TODO 注意,此处是专门去查看 TypeScript中,TS类型的结构。(这些信息,按道理编译为js后无法得到的;但这里通过反射可以得到)
*
*/
import 'reflect-metadata';
var meta = function (classPrototype, memberKeyName, memberValueDescriptor) {
// 获取成员类型(指定成员)
var type = Reflect.getMetadata('design:type', classPrototype, memberKeyName);
// 获取成员参数类型(指定成员)
var paramtypes = Reflect.getMetadata('design:paramtypes', classPrototype, memberKeyName);
// 获取成员返回类型(指定成员)
var returntype = Reflect.getMetadata('design:returntype', classPrototype, memberKeyName);
// 获取所有元数据key(由TypeScript 注入)
var keys = Reflect.getMetadataKeys(classPrototype, memberKeyName);
console.log(keys); // [ 'design:returntype', 'design:paramtypes', 'design:type' ]
// 成员类型
console.log(type); // Function
// 参数类型
console.log(paramtypes); // [String] 或者 [String,Number,Function,Boolean]
// 成员返回类型
console.log(returntype); // String
};
var ReflectTest = /** @class */ (function () {
function ReflectTest() {
}
ReflectTest.prototype.test = function (num) {
return num + '';
};
__decorate([
meta // 使用该注解,打印出:该函数【所处的Class类型】,以及函数的【参数列表类型】、【返回类型】、【元数据】
,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Number]),
__metadata("design:returntype", void 0)
], ReflectTest.prototype, "test", null);
return ReflectTest;
}());
//# sourceMappingURL=decorator-experiment.js.map