【问题标题】:What does <this> mean in TypeScript generics?<this> 在 TypeScript 泛型中是什么意思?
【发布时间】:2019-04-02 18:01:48
【问题描述】:

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

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

特别是IRouterMatcher&lt;this&gt;

我阅读了几次文档,但找不到任何提及此用例的内容。在 SO 或网络中搜索 &lt;this&gt; 非常困难,因为尖括号通常会被去掉。

【问题讨论】:

  • 在 TypeScript 操场上玩耍,看起来this 指的是界面本身(在本例中为IRouter)。
  • @FrankModica 我想我明白你的意思了。查看IRouterMatcher&lt;T&gt; 接口,我看到签名是(path: PathParams, ...handlers: RequestHandler[]): T;(其中之一- 使用重载)。那么,IRouterMatcher&lt;T&gt;&lt;T&gt; 将是 this 的任何类型?

标签: typescript express generics


【解决方案1】:

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! 

【讨论】:

  • 感谢您抽出宝贵时间回答这个问题。我非常熟悉您为方法链接返回对象的构造。但是,您的示例没有在泛型类型中使用 &lt;this&gt; ......这是我有点模糊的部分。
【解决方案2】:

我相信&lt;this&gt;,在您的示例中,指的是当前正在实现接口的类型。例如,如果一个名为 TestClass 的类实现了 IRouter,那么返回 IRouterMatcher&lt;this&gt; 的函数将返回一个 IRouterMatcher&lt;TestClass&gt;

在做更多研究之后,使用&lt;this&gt; 可能在功能上等同于说&lt;T extends IRouter&gt;,例如all: IRouterMatch&lt;T extends IRouter&gt;。使用this 可能只是表达同一事物的一种更短的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2020-06-08
    • 2019-02-24
    • 2011-08-22
    • 1970-01-01
    相关资源
    最近更新 更多