express - Vad betyder <this> i TypeScript-generics?
Vi använder express med TypeScript i vår app. Jag stötte på deras typdefinitioner och undrade vad följande betyder:
export interface IRouter extends RequestHandler {
all: IRouterMatcher<this>;
}
I synnerhet IRouterMatcher<this>.
Jag läste dokumentationen några gånger och kunde inte hitta något som nämnde detta användningsfall. Och det är ganska svårt att söka efter <this> varken på SO eller på webben eftersom vinkelparenteserna vanligtvis tas bort.
Svar #1
this hänvisar till den aktuella tillgängliga typen.
Detta kan också vara subtypen av den åsidosatta klassen eller gränssnittet.
Se även Polymorfa this-typer på https://www.typescriptlang.org/docs/handbook/advanced-types.html
Exempel :
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!
Svar #2
Jag tror att <this>, i ditt exempel, refererar till typen som för närvarande implementerar gränssnittet. Till exempel, om en klass som heter TestClass implementerade IRouter, skulle funktionerna som returnerar IRouterMatcher<this> returnera en IRouterMatcher<TestClass>.
Efter att ha gjort lite mer forskning, kan användning av <this> vara funktionellt ekvivalent med att säga <T extends IRouter> såsom all: IRouterMatch<T extends IRouter>. Att använda this kan bara vara ett kortare sätt att uttrycka samma sak.
