我想向HtmleLementAgnameMap中的所有接口添加链接功能.

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

这当然不起作用,因 for each 扩展HTMLElement的接口现在都包含一个doSomething方法,该方法将返回HTMLElementTagNameMap个值中的任何一个.相反,我希望HTMLTableElement.doSomething返回HTMLTableElement类型的对象,HTMLDivElement.doSomething返回HTMLDivElement类型的对象,以此类推.

这样的泛化是可能的,还是我需要 for each 接口"复制"它?

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

推荐答案

我认为this的退货类型是你想要的.

Here's a demo:

interface HTMLElement {
    foo(): this;
}

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

// ...

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

// ...

在演示中,您可以将鼠标悬停在一个变量上,该变量分配了调用foo的结果,并且可以看到该类型是相应HTML元素的接口.

Typescript相关问答推荐

如何修复VueJS中的val类型不能赋给函数

Typescript对每个属性具有约束的通用类型

angular 17独立使用多个组件(例如两个组件)

typescript抱怨值可以是未定义的,尽管类型没有定义

如何修复正在处理类型但与函数一起使用时不处理的类型脚本类型

如何使用一个字段输入对象,其中每个键只能是数组中对象的id属性,而数组是另一个字段?

向NextAuth会话添加除名称、图像和ID之外的更多详细信息

访问继承接口的属性时在html中出错.角形

为什么在回调函数的参数中不使用类型保护?

如何在Vue中使用Enum作为传递属性的键类型?

如何编写在返回函数上分配了属性的类型安全泛型闭包

try 呈现应用程序获取-错误:动作必须是普通对象.使用自定义中间件进行MySQL操作

如何将spread operator与typescripts实用程序类型`参数`一起使用

有没有办法在Reaction组件中动态导入打字脚本`type`?

如何在TypeScrip中使用数组作为字符串的封闭列表?

带有过滤键的 Typescript 映射类型

React HashRouter,单击导航栏时页面重新加载出现问题

有没有办法从不同长度的元组的联合中提取带有类型的最后一个元素?

const 使用条件类型时,通用类型参数不会推断为 const

如何在故事书的Typescript 中编写decorator ?