2016-08-09 22 views
4

ich einen Datensatz ein Vanille JS Objekt zu konvertieren Ich versuchevon PURESCRIPT Datensatz ein JS-Objekt konvertiert

module MyModule where 

data Author = Author { name :: String, interests :: Array String } 

phil :: Author 
phil = Author { name: "Phil", interests: ["Functional Programming", "JavaScript"] } 

, wenn ich das Objekt von JS Zugriff

MyModule.phil 

es enthält andere Eigenschaften, die ich ist nicht interessiert (value0)

{"value0":{"name":"Phil","interests":["Functional Programming","JavaScript"]}} 

, wie Sie die Datensätze aus der Pures Marschall tun cript Welt zu JS?

+0

haben Sie versuchen: 'JSON.stringify (MyModule.phil [ "value0"])' oder 'JSON.parse (JSON.stringify (MeinModul.phil)) ["value0"] '? –

+0

das würde funktionieren, aber das ist nicht das, was ich hier frage. Es muss einen Weg in Purescript geben, um Records in js-Objekte zu konvertieren. Ich vermute, dass es in den purescript-argonaut- oder purescript-fremden Paketen ist, sehe aber nur Referenzen zu JSON-Decodierung und nicht zu js-Objektliteralen. –

+3

Versuchen Sie, 'newtype' anstelle von' data' zu verwenden. –

Antwort

6

In Abschnitt 10.16 von PURESCRIPT By Example zeigt Phil Freeman ein Beispiel eines newtype einen Rekord Einwickeln:

newtype FormData = FormData 
    { firstName :: String 
    , lastName :: String 
    , street :: String 
    , city  :: String 
    , state  :: String 
    , homePhone :: String 
    , cellPhone :: String 
    } 

Dann in Abschnitt 10.18 schreibt er:

„Der FormData Typ ist ein neuer Typ für einen Datensatz, daher wird ein Wert vom Typ FormData, der an JSON.stringify übergeben wird, als JSON-Objekt serialisiert Dies liegt daran, dass neue Typen dieselbe Laufzeitdarstellung wie ihre haben zugrunde liegende Daten. "

Ich denke, Sie müssen unter die Haube schauen und schauen, was PSC generiert, um das wirklich zu schätzen. Wir tauschen werden data für newtype,

newtype Author = Author { name :: String, interests :: Array String } 

phil :: Author 
phil = Author { name: "Phil", interests: ["Functional Programming", "JavaScript"] } 

und diese kompiliert

// Generated by psc version 0.9.2 
"use strict"; 
var Author = function (x) { 
    return x; 
}; 
var phil = { 
    name: "Phil", 
    interests: [ "Functional Programming", "JavaScript" ] 
}; 
module.exports = { 
    Author: Author, 
    phil: phil 
};