【发布时间】:2014-02-06 22:41:03
【问题描述】:
以下 JavaScript 函数为给定函数添加了前后通知。我正在尝试为此函数添加 TypeScript 类型签名。
function wrap(fn, before, after) {
var id = function(x) { return x };
before = before || id;
after = after || id;
return function() {
var args = Array.prototype.slice.call(arguments);
var modifiedArgs;
try {
modifiedArgs = before.apply(this, args);
} catch (e) {
console.log(e);
}
var result = undefined;
try {
result = fn.apply(this, modifiedArgs || args);
} finally {
try {
after.apply(this, args);
} catch (e) {
console.log(e);
}
}
return result;
}
}
我能想到的类型是:
-
fn是Function类型 -
after是(_:any[]) => any[]类型 - 返回类型为
Function
before 的类型应该是什么?它接受any[] 并返回void 或any[]。此外,是否可以对返回类型与fn 具有相同类型签名的事实进行编码?
【问题讨论】:
-
我认为更改
before建议的语义以返回null或修改后的参数数组是这里的方法。不过我还没试过。
标签: javascript typescript