【发布时间】:2019-08-01 23:20:42
【问题描述】:
假设我有一个简单的用例 - 我希望将一个函数包装在另一个时间跟踪函数中。我不想在任何地方复制粘贴我的时间跟踪代码,而是通过在我的原始函数周围创建一个包装函数并因此创建一个新函数来抽象时间跟踪代码。所以我最终得到了如下函数。
function wrapFunction(someFunction: Function) {
const wrappedFunction = function() {
let args = arguments;
let beforeTime = new Date();
someFunction.apply(args);
let afterTime = new Date();
console.log("Time Elapsed " + afterTime - beforeTime);
};
return {execute: wrappedFunction};
}
然后要使用它,我会执行以下操作:
//Generate the wrapped function
let wrappedFunction = wrapFunction((param1 : string, param2: number) =>{
console.log("Param1 = ", param1);
console.log("Param2 = ", param2);
});
//This is the actual usage of the function
wrappedFunction.execute('param1', 2);
我的问题是:有没有办法以 Typescript 可以检测错误的方式动态设置返回的 .execute() 的函数参数,并且 IDE 可以获取函数参数。
在当前状态下,如果不检查函数的生成位置,我无法检查应该传递给 .execute() 的参数。
【问题讨论】:
-
感谢您的回复!不幸的是,这不允许我的 IDE 获取函数参数,但它确实像我想要的那样强制输入!不确定 IDE 是否可行 - 但这已经足够接近了!
标签: javascript typescript function types metaprogramming