Wie funktionieren Typoskript-Schnittstellen mit Konstruktsignaturen?
Ich bin mit einigen Schwierigkeiten, wie definieren von Konstruktoren in interfaces funktionieren. Ich könnte Total Missverständnis etwas. Aber ich habe nach Antworten gesucht für eine gute Weile, und ich kann nicht finden, alles, was damit in Zusammenhang stehen.
Wie kann ich die folgende Schnittstelle implementieren in einem Typoskript Klasse:
interface MyInterface {
new ( ... ) : MyInterface;
}
Anders Hejlsberg schafft eine Schnittstelle, die etwas ähnliches in diesem video (etwa 14 Minuten). Aber für das Leben von mir ich kann nicht implementieren diese in eine Klasse.
Wahrscheinlich bin ich Missverständnis, etwas, was ich nicht erhalte?
EDIT:
Klären. Mit "neue ( ... )" ich meinte "nichts". Mein problem ist, dass ich nicht bekommen kann, selbst die basic-version dieser Arbeit:
interface MyInterface {
new () : MyInterface;
}
class test implements MyInterface {
constructor () { }
}
Dies ist nicht das kompilieren bei mir bekomme ich "Klasse" test "deklariert-interface MyInterface' aber nicht umsetzen: der Typ 'MyInterface' erfordert ein Konstrukt Signatur, aber Geben Sie "test" fehlt ein", wenn Sie versuchen, um es zu kompilieren.
EDIT:
Also auf der Suche nach ein bisschen mehr gegeben, das feedback.
interface MyInterface {
new () : MyInterface;
}
class test implements MyInterface {
constructor () => test { return this; }
}
Ist nicht gültig Typoskript und diese das problem nicht lösen. Sie können nicht definieren, der return-Typ des Konstruktors. Es wird wieder "testen". Die Signatur der folgenden Schritte aus:
class test {
Konstruktor () { }
}
Scheint die "neue () => test" (erhalten, indem man die Maus über die "Klasse" der online-editor nur mit diesem code eingefügt). Und das ist, was wir wollen und was ich dachte, es wäre.
Kann mir jemand ein Beispiel geben, dies oder etwas ähnliches, wo es eigentlich kompilieren?
BEARBEITEN (wieder...):
So, ich könnte kommen mit einer Idee, warum es möglich ist, zu definieren, diese in eine Schnittstelle, aber keine Möglichkeit zur Umsetzung in ein Typoskript Klasse.Die folgenden Werke:
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
interface MyInterface {
new () : MyInterface;
}
var testFunction = (foo: MyInterface) : void => { }
var bar = new MyClass();
testFunction(bar);
So ist dies nur ein feature von Typoskript, können Sie die javascript-Schnittstelle? Oder ist es möglich, Sie zu implementieren, in Maschinenschrift ohne Implementierung der Klasse mit javascript?
InformationsquelleAutor der Frage Nypan | 2012-11-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konstruieren Signaturen-in-Schnittstellen sind nicht vorhanden in der Klassen; Sie sind nur für die Definition der vorhandenen JS-APIs definieren, dass eine "neue" -Funktion können. Hier ist ein Beispiel mit Schnittstellen
new
Signaturen, die funktioniert:Dies schafft eine wirkliche Einschränkung für das, was Sie aufrufen können
makeObj
mit:InformationsquelleAutor der Antwort Ryan Cavanaugh
Auf meiner Suche für die exakt gleiche Frage ging ich auf der Suche, wie sich das TypeScript-Team wussten Sie, dass...
Sind Sie mit der Deklaration einer Schnittstelle und danach eine variable mit einem Namen mit genau dem interface-Namen. Dies ist übrigens auch der Typ statische Funktionen.
Beispiel aus
lib.d.ts
:Ich habe versucht, und es funktioniert wie Charme.
InformationsquelleAutor der Antwort Nils
Aus einer design-Perspektive, ist es nicht üblich, geben Sie den Konstruktor Anforderungen in einem interface. Die Schnittstelle sollte beschreiben die Operationen, die Sie durchführen können auf ein Objekt. Verschiedene Klassen, die das interface implementieren, erlaubt werden sollte, erfordern verschiedene Konstruktor-Parameter, wenn Sie brauchen.
Zum Beispiel, wenn ich eine Schnittstelle:
Ich hätte Implementierungen für die Ablage der Daten als cookie, die braucht keine Konstruktor-Parameter, und eine version, die speichert die Daten in einer Datenbank, die eine Verbindungszeichenfolge als parameter des Konstruktors.
Wenn Sie immer noch wollen, um zu definieren, Konstruktoren in einer Schnittstelle, es ist ein schmutziger Weg, dies zu tun, die ich verwendet, um diese Frage zu beantworten:
Schnittstellen mit konstruieren Signaturen keine Typ-überprüfung
InformationsquelleAutor der Antwort user75525
Zur Erzielung des beabsichtigten Verhaltens könnten Sie Dekoratorenobwohl das ist wahrscheinlich nicht das, was Sie werden sollen.
Diese
kompiliert ohne Probleme. Im Gegensatz dazu wird die folgende definition für TestClass
wird nicht kompiliert.
InformationsquelleAutor der Antwort MarvinDV
Sowie eine Schnittstelle mit einem Konstrukt Signatur ist nicht dazu gedacht, realisiert zu werden von einer Klasse(auf den ersten Blick mag dies seltsam Aussehen für die Jungs mit C#/Java hintergrund gefällt mir, sondern ihm eine chance geben). Es ist etwas anders.
Für einen moment denken, es als eine Schnittstelle mit einem call-Unterschrift(wie ein @FunctionalInterface im Java-Welt). Sein Zweck ist es, zu beschreiben, eine Funktion geben..Art. Der beschriebene Signatur soll zufrieden sein, die durch ein function-Objekt...aber nicht irgendwelche high-level-Funktion oder einer Methode. Es sollte eine Funktion sein, die weiß, wie zu bauen ein Objekt, eine Funktion, die aufgerufen wird, wenn
new
- Schlüsselwort verwendet wird.Also eine Schnittstelle, mit der ein Konstrukt Signatur definiert die Signatur eines Konstruktors ! Der Konstruktor der Klasse, die beachtet werden sollten, mit der Unterschrift in der Schnittstelle definiert(man denke daran, wie der Konstruktor die Schnittstelle implementiert). Es ist wie ein builder oder eine factory !
Hier ein kurzes code-snippet, das versucht zu zeigen, die häufigste Verwendung:
InformationsquelleAutor der Antwort egelev