2017-06-21 3 views
1

Ich weiß, dies ist im Wesentlichen die gegenteilige Absicht von Typescript, aber ich möchte in der Lage sein, ein Objekt von einer Typoskript-Schnittstelle programmgesteuert zu generieren. Grundsätzlich möchte ich etwas wie folgt aus:Generieren Objekt von Typescript-Schnittstelle

interface Foo { 
    bar: string 
} 

const generateObjFromInterface = (Foo) => // { bar: 'string'} 

ich -do nicht- daran, wie gekünstelt die Umsetzung ist, wenn es möglich ist! Wenn es kategorisch unmöglich ist, wäre das auch hilfreiche Information!

Vielen Dank im Voraus!

+1

Der einzige Weg ist, den Quellcode zu verarbeiten, da Schnittstellen überhaupt nicht existiert Laufzeit. Etwas Ähnliches wie [diese Bibliothek] (https://github.com/kimamula/ts-transformer-keys). – Saravana

Antwort

1

Es ist möglich. Da sich Typoskript 2.4 um die Ecke befindet, können wir während der Kompilierung benutzerdefinierte Transformatoren für Typoskripte verwenden, um die Liste aller vorhandenen Eigenschaften abzurufen und als Ergebnis ein Objekt mit solchen Eigenschaften zu erstellen. Hier

ist ein example, aber bitte beachten Sie - wie ich gesagt habe dieses Typoskript zu verwenden, erfordern 2.4+, die noch nicht in stabiler Version ist

+0

Das sieht buchstäblich wie meine Traumlösung aus, vielen Dank! –

+0

haben Sie dieses Paket erfolgreich verwendet? Ich habe gekämpft, um festzustellen, ob das ein Benutzerfehler oder ein Problem mit dem Paket selbst ist, aber ich bekomme immer den folgenden Fehler: ts_transformer_keys_1.keys ist keine Funktion –

+0

Nein, ich habe es nicht in der Praxis verwendet. Haben Sie die Anleitung zum Erstellen des Programms gefolgt: https://github.com/kimamula/ts-transformer-keys#how-to-use-the-custom-transformer? Dies ist ein wichtiger Schritt. – Amid

2

Da die TypeScript-Schnittstellen in der JavaScript-Ausgabe nicht vorhanden sind, ist eine Laufzeitreflexion über eine Schnittstelle nicht möglich.

dieses Typoskript Gegeben:

interface Foo { 
    bar: string 
} 

Dies ist die resultierende JavaScript:

enter image description here

Da kein JavaScript ist, was Sie tun möchten, ist kategorisch unmöglich sehr gekünstelt ist.

Edit: Kommen Sie zu denken, Sie könnte finden, lesen und analysieren Sie die * .ts Quelldatei zur Laufzeit.