2016-08-11 1 views
1

Ich schreibe eine Funktion mit Scala.js übersetzt, die jedes beliebige JavaScript-Objekt akzeptieren sollte.JavaScript-Objekt als Funktionsparameter

Ex:

// This has been transpiled using Scala.js 
var my_service = new com.myself.Service(); 

// This is plain JavaScript 
var result1 = service({ hello: "yolo" }); 
var result2 = service({ whatever: "ok", really: { yes: "right", no: "don't" } }); 

Allerdings kann ich nicht den Eingabetyp finden, dass es passt.

  • Was wäre die Scala-Funktion Signatur, um so etwas zu bekommen?
  • Könnte es dann problemlos als "Scala/JS-Fallklasse" verwendet werden?

Hinweis (wenn es hilft, eine Richtung für die Antworten zu geben): Diese Objekte haben, im wirklichen Leben, ein erwartetes Schema, aber es kann nicht als JS-Objekt aus Scala.js erzeugt erstellt werden, da es von einem anderen kommt konsumierter Service.

+1

Das sind JavaScript Objektliterale (mit Streichern und mehr Objektliterale). Sie sind nicht JSON. Wenn Sie sie aus dem JavaScript extrahieren und in eine eigene Datei einfügen, sind sie immer noch nicht JSON, da JSON nur Zeichenfolgen als Eigenschaftsnamen (und nicht als Bezeichner wie hier) zulässt. – Quentin

+0

In Ordnung. Ich werde es umformulieren. Vielen Dank. –

+1

"Objekt" wäre ausreichend – Quentin

Antwort

1

Da die Objekte haben ein erwartetes Schema, seine wahrscheinlich am einfachsten, eine Fassade Typen zu definieren:

@js.native 
trait Args extends js.Object { 
    val hello: js.UndefOr[String] 
    val whatever: js.UndefOr[String] 
    val really: js.UndefOr[ReallyArgs] 
} 

@js.native 
trait Really extends js.Object { 
    val yes: String 
    val no: String 
} 

def myMethod(args: Args): Unit = { 
    println(args.hello) 
    println(args.really.map(_.yes)) 
} 
Verwandte Themen