TypeScript泛型中的< this >是什么意思?

3
我们在应用程序中使用 TypeScript 和 express。我遇到了他们的类型定义,并想知道以下内容的含义:
export interface IRouter extends RequestHandler {
    all: IRouterMatcher<this>;
}

enter image description here

特别是IRouterMatcher<this>

我已经阅读了文档几遍,没有找到任何提及这种用法的内容。而且在SO或者网上搜索<this>很困难,因为尖括号通常会被删除。


在 TypeScript 的 playground 中玩耍,看起来 this 指的是接口本身(在这种情况下,是 IRouter)。 - Frank Modica
@FrankModica 我想我明白你的意思了。看着 IRouterMatcher<T> 接口,我发现它的签名是 (path: PathParams, ...handlers: RequestHandler[]): T;(其中一个 - 使用重载)。所以,IRouterMatcher<T> 中的 <T> 将是 this 的类型? - Eric Liprandi
2个回答

4

this 指的是当前可用类型。

它也可能是被重写的类或接口的子类型。

参见 Polymorphic this types

示例:

class Calculator {
    a: number;
    add(): this {
        a++;
        return this;
    } 
}

class AdvancedCalculator {
    substract(): this {
         a--;
         return this;
    } 
}

new AdvancedCalculator()
   .add() // returns AdvancedCalculator as "this" 
   .substact() // it compiles! 

感谢您抽出时间来回答。我对您返回对象以进行方法链构造非常熟悉。但是,您的示例没有在通用类型中使用<this>...这是我有点困惑的部分。 - Eric Liprandi

0

我认为在你的例子中,<this> 指的是当前实现接口的类型。例如,如果 TestClass 类实现了 IRouter 接口,则返回 IRouterMatcher<this> 的函数将返回一个 IRouterMatcher<TestClass>

经过更多的研究,使用 <this> 可能在功能上等同于说 <T extends IRouter>,比如 all: IRouterMatch<T extends IRouter>。使用 this 只是一种更简短的表达方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接