Typescript-要键入的字符串

问题描述 投票:0回答:1

我有一个表示某些数据的类Message。每个消息共享相同的标头。但是,根据消息的类型,它们具有不同的有效负载。例如:

class Message {
  serial: string
  length: number
}

class LKMessage extends Message {}

class UDMessage extends Message {
  location: Location
}

这里的问题是我不知道消息类型。用户只需说“发布一条消息”,然后将类型和数据一起发送即可。我可以为每种消息类型创建不同的post函数,但是我会写很多相同的代码。

我尝试过这样的事情:

interface MessagePayload {}

interface LKMessagePayload extends MessagePayload {}

interface UDMessagePayload extends MessagePayload {
  location: Location
}

class Message<T extends MessagePayload> {
  serial: string
  length: number
  payload: T
}

问题是实例化:用户将类型作为string发送,所以我不能只写new Message<type>(data)。我曾考虑过使用反射,但无法使其正常工作。

typescript reflection
1个回答
0
投票

添加一个名为type的字段,并将其设置为每种类型的唯一字符串。然后,您将知道要使用的类。

class Message {
    type: string = "base"
    serial: string
    length: number
}

class LKMessage extends Message {
    type: "LK" = "LK"
}

class UDMessage extends Message {
    type: "UD" = "UD"
    location: Location
}
© www.soinside.com 2019 - 2024. All rights reserved.