2016-08-11 6 views
1

Я пишу функцию, переданную с помощью Scala.js, которая должна принимать любой случайный объект JavaScript.JavaScript-объект как параметр функции

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" } }); 

Однако, я не могу найти тип входа, который соответствует его.

  • Какова будет подпись функции Scala, чтобы получить такую ​​вещь?
  • Может ли он использоваться как «класс корпуса Scala/JS»?

Примечания (если это помогает дать направление для ответов): эти объекты имеют, в реальной жизни, ожидаемую схему, но она не может быть создана как объект JS генерируется из Scala.js, поскольку она исходит от другого потребляемая услуга.

+1

Это объект JavaScript литералы (содержащие строки и более объектных литералов). Они не JSON. Если вы извлекли их из JavaScript и поместили их в собственный файл, то они все равно не были бы JSON, поскольку JSON разрешает только строки как имена свойств (а не идентификаторы, которые вы используете здесь). – Quentin

+0

Хорошо. Я перефразирую его. Благодарю. –

+1

«Объект» будет достаточным – Quentin

ответ

1

Поскольку объекты имеют ожидаемую схему, его, вероятно, проще всего определить тип фасада:

@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)) 
} 
Смежные вопросы