Что означает <this>в обобщениях TypeScript? - PullRequest
0 голосов
/ 29 октября 2018

Мы используем express с TypeScript в нашем приложении. Я наткнулся на их определения типов и мне было интересно, что означает следующее:

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

enter image description here

В частности, IRouterMatcher<this>.

Я прочитал документы несколько раз и не смог найти ничего, упоминающего этот вариант использования. И довольно трудно найти <this> в SO или в Интернете, поскольку угловые скобки обычно удаляются.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Я полагаю, <this> в вашем примере относится к типу, который в настоящее время реализует интерфейс. Например, если класс с именем TestClass реализовал IRouter, то функции, которые возвращают IRouterMatcher<this>, вернут IRouterMatcher<TestClass>.

После дополнительных исследований использование <this> может быть функционально эквивалентно высказыванию <T extends IRouter>, например all: IRouterMatch<T extends IRouter>. Использование this может быть просто более коротким способом выразить то же самое.

0 голосов
/ 29 октября 2018

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! 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...