Es scheint, dass das, was ich versuche, nicht möglich ist, aber ich hoffe es wirklich.Ist es möglich, Elemente mehrerer Typen in einer TypeScript-Annotation zu kombinieren?
Im Wesentlichen habe ich zwei Schnittstellen, und ich möchte einen einzelnen Funktionsparameter als die Kombination von beiden annotieren.
interface ClientRequest {
userId: number
sessionKey: string
}
interface Coords {
lat: number
long: number
}
Und dann, in der Funktion, möchte ich so etwas wie dies zu tun:
function(data: ClientRequest&Coords) { ... }
Damit meine ‚Daten‘ Objekt alle Mitglieder aus beiden Typen enthalten könnten.
Ich sah etwas referenziert in einer (spec preview) [https://github.com/Microsoft/TypeScript/issues/805], unter "Combining Typen 'Mitglieder", aber es scheint, als ob dies noch nicht gemacht hat.
Wenn es nicht möglich ist, könnte meine Lösung so aussehen:
interface ClientRequest<T> {
userId: number
sessionKey: string
data?: T
}
function(data: ClientRequest<Coords>) { ... }
die in diesem Fall funktionieren würde, auch wenn es nicht so dynamisch ist wie Ich mag würde. Ich würde wirklich in der Lage sein möge, um mehr (2+) Arten in der Anmerkung selbst zu kombinieren:
function(data: TypeA&TypeB&TypeC) { ... }
Ich würde vermuten, dass die herkömmliche Lösung ist eine Art zu definieren, die diese Typen erweitert, aber das ist weniger flexibel zu sein scheint. Wenn ich einen Typ hinzufügen möchte, müsste ich entweder (a) zu der Deklaration zurückkehren und sie neu schreiben, oder (b) eine völlig neue Schnittstelle erstellen. Nicht sicher, ich stimme dem zusätzlichen Overhead zu.
Irgendwelche TypeScript-Experten wollen mich in die richtige Richtung weisen?
Das ist der einzige Weg zu gehen zu sein scheint. Es ist einfach viel wortreicher als ich mir erhofft hatte. – Joshua
Dies sollte die akzeptierte Antwort sein;) – basarat
Während es ein guter Vorschlag ist, und wahrscheinlich der richtige Weg zu gehen, beantwortet es nicht wirklich die Frage, die ist "Ist es möglich, Typen in einer Anmerkung zusammenzufassen?" Die Implikation ist, dass es nicht ist, aber ich warte auf eine explizite Antwort. – Joshua