【发布时间】:2019-05-09 04:38:14
【问题描述】:
我试图限制函数参数以扩展函数,其中参数和返回值被限制为相同类型,而不要求函数本身是通用的。
我有一个简单的工厂函数,它创建具有属性的 dom 节点,如下所示:
function div(className, attributes, children)
EventListener 属性(如 onclick)仅限于函数或元组:
type EventHandler<T extends Event> = ((ev: T) => void) | [(ev: T, seed: SameType) => SameType, SameType];
SameType 基本上注释您应该提供一个元组,其中第一项是一个接受种子值的函数,第二个参数指定在调用该函数后传递给该函数的初始种子。
我试图让参数本身成为泛型,将自己传递给一个类型,然后使用条件匹配,但没有运气。我不能在接口本身上使用泛型,因为这没有任何意义(onclick、oninput 和 onmouseover 都会有不同的 SameType 种子值)。
该函数的灵感来自 Inferno 的 linkEvent 函数 (https://github.com/infernojs/inferno/blob/master/packages/inferno/src/core/types.ts#L45),但您只需传入一个我认为很方便的元组,而不是调用函数,但输入它却变成了一场噩梦!感谢任何输入。
这个问题是否与 Typescript 在值级别上不允许泛型有关,还是我遗漏了什么?我在想this issue。
【问题讨论】:
标签: typescript generics