小编fig*_*uts的帖子

如何使用Reads对JsValue进行模式匹配

我有一个演员从播放2.3中的websocket接收JsValue.我还有一个定义Reads转换器的case类.当我尝试对案例类进行模式匹配时,它总是匹配JsValue而不是case类.

case class Ack(messageType: String, messageId: Int){
  implicit val ackReads: Reads[Ack] = (
      (JsPath \ "message_type").read[String] and
      (JsPath \ "message_id").read[Int]
  )(Ack.apply _)
}


class ChannelActor(out: ActorRef) extends Actor{
  def receive = {
    case a: Ack =>
      println(s"Acknowledged! $a")
    case msg: JsValue =>
      println("Got other jsvalue")
    case _ =>
      println("Got something else")
  }
}
Run Code Online (Sandbox Code Playgroud)

我如何模式匹配我从websocket接收的JsValue与案例类中的Reads验证器?

编辑:我找到了一种解决方法,通过手动模式匹配JsValue来找出我需要验证的类型.代码现在看起来像这样:

case class Ack(messageType: String, messageId: Int)
object Ack{
  implicit val ackReads: Reads[Ack] = (
    (JsPath \ "message_type").read[String](verifying[String](_ == "ack")) and
    (JsPath \ "message_id").read[Int]
  )(Ack.apply _) …
Run Code Online (Sandbox Code Playgroud)

scala playframework playframework-2.0

6
推荐指数
1
解决办法
2005
查看次数

如何在打字稿中将对象的值引用为泛型?

我正在尝试为此函数编写签名:

export function objToArray(obj){
    let ret = [];
    for(const key of Object.keys(obj)){
        ret.push(Object.assign({objKey: key.toString()}, obj[key]));
    }
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

因此,对于包含 UI 类型值的 T 类型对象,要返回Array<U & {objKey: string}>。我不知道如何用打字稿做到这一点。

typescript

3
推荐指数
1
解决办法
4832
查看次数