2017-09-01 3 views
2

Ich bekomme eine Instanz eines Objekts mit Say-Typ A. Wie erweitere ich dies mit einer Getter-Funktion in Typescript? Hinzufügen einer Funktion, die ich tunWie eine Typoskript-Klasse mit einer Get-Eigenschaft zu erweitern?

A.prototype.testFunction = function() { 
    if(this.something) { 
    return this.something; 
    } 
return null; 
} 

ich die Art in einer index.d.ts Datei zu verlängern, wie:

interface A { 
    testFunction(): SomeType|null; 
} 

Aber wie soll ich ich es hinzufügen, wenn ich als Getter-Funktion angezeigt werden soll, und nicht nur als Funktion?

ich versucht, Blick auf Object.defineProperty() aber Typoskript selbst scheint nicht zu glücklich zu sein mit, dass man arbeiten, an die falsche Instanz this im folgenden Code verweisen:

Object.defineProperty(A.prototype, "testGet", { 
    get: function() { 
     if(this.something) { // <== this appears to not refer to type A 
      return this.something; 
     } 
     return null; 
    }, 
    enumerable: false, 
    configurable: true 
}); 
+0

'function()' Deklarationen erfassen nicht den 'this' Kontext, aber Pfeilfunktionen' => 'werden. 'testFunction =() => {tu stuff}' [Siehe Dokumente] (https://www.typescriptlang.org/docs/handbook/functions.html) – JBC

Antwort

3

Getter/Setter erklärt werden kann einfach als Eigenschaften in der Schnittstelle:

interface A { 
    testGet: SomeType|null; 
} 

Und die type of this parameter in der Getter-Funktion angeben:

Object.defineProperty(A.prototype, "testGet", { 
    get (this: A) { 
     if(this.something) { 
      return this.something; 
     } 
     return null; 
    }, 
    enumerable: false, 
    configurable: true 
}); 
+0

Ok, aber wie beziehe ich mich auf 'this' oder das Objekt in Frage in der defineProperty? Es sagt, es habe implizit Typ 'any' (ich habe dies in der tsconfig verboten). – Sheph

+0

Sie können den Typ von this als Parameter für Ihren Getter angeben. Dies wird beim Kompilieren gelöscht. – Saravana

Verwandte Themen