typescript - 如何在 Typescript 中包装具有多个重载的函数?
问题描述
我正在尝试包装一个函数来用一些行为来装饰它。我能够创建一个具有多个重载的函数,但是即使重载的参数类型与包装函数的重载相匹配,如果没有类型保护函数,我似乎无法让它工作,这似乎很愚蠢。
这是一个 TS Playground 来说明我到目前为止的方法。
我所拥有的是:
function handleMainEvent(
elem: HTMLFormElement,
handler: FormSubmitHandler
)
function handleMainEvent(
elem: HTMLIFrameElement,
handler: MessageHandler
)
function handleMainEvent(
elem: HTMLFormElement | HTMLIFrameElement,
handler: FormSubmitHandler | MessageHandler
) {}
function handleMainEvent2(
elem: HTMLFormElement,
handler: FormSubmitHandler
)
function handleMainEvent2(
elem: HTMLIFrameElement,
handler: MessageHandler
)
function handleMainEvent2(
elem: HTMLFormElement | HTMLIFrameElement,
handler: FormSubmitHandler | MessageHandler
) {
if (isHTMLIFrameElement(elem) && isMessageHandler(handler)) {
return handleMainEvent(elem, handler);
}
else if (isHTMLFormElement(elem) && isFormSubmitHandler(handler)) {
return handleMainEvent(elem, handler);
}
}
...但我想写这样的东西:
function handleMainEvent2(
elem: HTMLFormElement,
handler: FormSubmitHandler
)
function handleMainEvent2(
elem: HTMLIFrameElement,
handler: MessageHandler
)
function handleMainEvent2(
elem: HTMLFormElement | HTMLIFrameElement,
handler: FormSubmitHandler | MessageHandler
) {
return handleMainEvent(elem, handler);
}
}
用任意行为来装饰具有多个重载的函数的最直接方法是什么?
解决方案
推荐阅读
- java - import org.openqa.selenium.By not found 尽管添加了 maven 依赖项
- mysql - MySQL 查询:如何使用 CONCAT_WS 和 COALESCE 正确识别逗号分隔的结果值并将其重新转换为原始概念
- algorithm - 素数算法的复杂度是多少?
- python - 为什么我的 bash 在使用 Python 时不读取参数?
- java - Java程序在给定范围内查找回文数
- python - 列表中的“列表索引超出范围”错误 - 字典值
- javascript - 无法在 NVD3 中制作图表。x/y 轴上的格式问题
- java - Java BorderLayout 不起作用,JPanels 不会按照我希望的方式移动
- python - 如何使用 MongoDB 作为数据库在 Python 中创建、管理和验证登录和个人资料页面的会话?
- r - 使用乳胶中的 kable 将上标添加到分组行的行名时缩进受到干扰