2016-07-30 15 views
0

Warum klagt TypeScript (2.1.0) über den folgenden Code?TypeScript Generic of Typ

this.request = new Request<this>(this.url); 

haben zwei für die this Schlüsselwort verschiedene Bedeutungen:

import Request from "../request/request.ts"; 
export default class Machine{ 
    private id: number; 
    private url:string; 
    private make:string; 
    private model:string; 
    private request:any; 
    constructor(){ 
    var self = this; 
    this.request = new Request<self>(this.url); //cannot find name self 
    } 
} 

Antwort

2

Diese Zeile des Codes (von self zu this geändert)

  1. Die tatsächliche Bezug auf this zur Laufzeit (this.request und this.url)

  2. Angeben der Art der this für die Kompilierung (new Request<this>)

Sie vermischt die beiden Bedeutungen und das ist, warum es nicht funktioniert, wenn Sie die self statt this dann verwenden möchten Sie brauchen verwenden typeof:

this.request = new Request<typeof self>(this.url); 
+0

ist es ein Fehler, dass der Compiler nicht Selbsttyp nicht ableiten? Gibt es einen Grund warum es nicht sollte? –

+1

Nein, es ist kein Fehler, 'self' ist eine Variable, aber was Sie als generischen Typ eingeben, sollte ein Typ sein, damit es nicht funktioniert, aber' typeof self' funktioniert. –