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

时间:2018-10-29 18:29:22

标签: typescript express generics

我们在应用程序中将express与TypeScript一起使用。我遇到了他们的类型定义,想知道以下是什么意思:

export interface IRouter extends RequestHandler {
    all: IRouterMatcher<this>;
}

enter image description here

尤其是IRouterMatcher<this>

我看了几次文档,找不到任何提及此用例的东西。而且,由于通常会去除尖括号,因此很难在SO或网络中搜索<this>

2 个答案:

答案 0 :(得分:3)

this是指当前可用的类型。

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

另请参见https://www.typescriptlang.org/docs/handbook/advanced-types.html

中的该类型多形

示例:

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! 

答案 1 :(得分:0)

在您的示例中,我相信<this>是指当前正在实现接口的类型。例如,如果名为TestClass的类实现了IRouter,则返回IRouterMatcher<this>的函数将返回IRouterMatcher<TestClass>

进行更多研究后,使用<this>在功能上等效于说<T extends IRouter>,例如all: IRouterMatch<T extends IRouter>。使用this可能只是表达同一件事的一种较短方法。