Typescript - 是否可以从扩展接口引用接口?

弗伦泽尔

我想为 HTMLElementTagNameMap 中的所有接口添加链接功能。由于它们有几十个,并且所有元素都是HTMLElement或扩展它,我认为应该有一种方法可以做这样的事情:

interface HTMLElement {
    doSomething<K extends keyof HTMLElementTagNameMap>(anArgument: any): HTMLElementTagNameMap[K]
}

这当然行不通,因为HTMLElement现在扩展的每个接口都包含一个doSomething预期返回任何HTMLElementTagNameMap值的方法。相反,我想HTMLTableElement.doSomething返回一个类型的对象HTMLTableElementHTMLDivElement.doSomething返回一个类型的对象HTMLDivElement等等。

这样的概括是可能的还是我需要为每个接口“复制”它?

如果可能的话,我该怎么做?

翅膀

我认为返回类型this是你想要的。

这是一个演示

interface HTMLElement {
    foo(): this;
}

const a = document.createElement("a");

// ...

const aFoo = a.foo();
//    ^^^^
// HTMLAnchorElement

// ...

在演示中,您可以将鼠标悬停在foo分配有调用结果的变量上,然后查看类型是相应 HTML 元素的接口。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章